SQL Academy · Lección

CASE buscado frente a CASE simple

Dos formas de escribir CASE

Lección 2 de 413 pasos

CASE buscado frente a CASE simple es una lección gratuita de SQL Academy en CoddyKit. Esta es la lección 2 de 4. Puedes leer la lección completa abajo gratuitamente — luego la practicas en el navegador con un editor de código integrado y un tutor de IA 24/7. Forma parte de la ruta de aprendizaje de SQL Academy, y tu progreso se sincroniza en la web y la app de CoddyKit. El curso de SQL Academy incluye 4 lecciones en total.

Dos formas de escribir CASE

SQL ofrece dos variantes de la expresión CASE: el CASE simple y el CASE buscado. Ambos devuelven un valor según ciertas condiciones, pero se diferencian en la forma de escribirlas.

Al finalizar esta lección, sabrá cuándo elegir cada forma y cómo evitar errores comunes al confundirlas.

CASE simple: la idea

Un CASE simple compara una expresión con una lista de valores. Piense en él como una tabla de búsqueda: elija una columna o un valor a la izquierda y, después, indique a qué equivale ese valor en cada rama WHEN.

Sintaxis: CASE expression WHEN value1 THEN result1 WHEN value2 THEN result2 ELSE default END

SELECT
  product_name,
  category_id,
  CASE category_id
    WHEN 1 THEN 'Electronics'
    WHEN 2 THEN 'Clothing'
    WHEN 3 THEN 'Books'
    ELSE 'Other'
  END AS category_name
FROM products;

CASE simple en la práctica

Aquí, la expresión CASE se coloca justo después de la palabra clave y la columna status se compara con cada valor de WHEN mediante una igualdad. Observe que no debe escribir status = en las ramas WHEN: la comparación se sobreentiende.

SELECT
  order_id,
  status,
  CASE status
    WHEN 'pending'   THEN 'Awaiting payment'
    WHEN 'paid'      THEN 'Payment received'
    WHEN 'shipped'   THEN 'On its way'
    WHEN 'delivered' THEN 'Completed'
    ELSE 'Unknown status'
  END AS status_label
FROM orders;

CASE buscado: la idea

Un CASE buscado no tiene ninguna expresión justo después de la palabra clave CASE. En su lugar, cada rama WHEN contiene una condición booleana completa. Esto lo hace mucho más flexible: puede combinar distintas columnas, comprobar rangos o llamar a funciones dentro de cada WHEN.

Sintaxis: CASE WHEN condition1 THEN result1 WHEN condition2 THEN result2 ELSE default END

SELECT
  employee_name,
  salary,
  CASE
    WHEN salary < 30000  THEN 'Entry Level'
    WHEN salary < 60000  THEN 'Mid Level'
    WHEN salary < 100000 THEN 'Senior'
    ELSE 'Executive'
  END AS salary_band
FROM employees;

CASE buscado en la práctica

Como cada WHEN acepta cualquier expresión booleana, puede combinar varias columnas en una sola rama. La base de datos evalúa las cláusulas WHEN de arriba abajo y devuelve el resultado de la primera rama cuyo valor sea TRUE.

SELECT
  product_name,
  stock,
  price,
  CASE
    WHEN stock = 0              THEN 'Out of stock'
    WHEN stock < 10 AND price > 100 THEN 'Low stock — premium item'
    WHEN stock < 10             THEN 'Low stock'
    ELSE 'In stock'
  END AS availability
FROM products;

Diferencia estructural clave

La tabla siguiente resume la diferencia fundamental:

CASE simple: una expresión después de CASE; cada WHEN comprueba la igualdad con esa expresión.
CASE buscado: no hay ninguna expresión después de CASE; cada WHEN es una condición booleana independiente.

Como el CASE simple solo realiza comprobaciones de igualdad, no puede gestionar rangos, valores NULL ni condiciones que involucren varias columnas. Para cualquier caso que vaya más allá de una coincidencia directa de valores, use CASE buscado.

-- Simple CASE: equality only
SELECT CASE day_number
         WHEN 1 THEN 'Monday'
         WHEN 2 THEN 'Tuesday'
         ELSE 'Other'
       END AS day_name
FROM schedule;

-- Searched CASE: any condition
SELECT CASE
         WHEN day_number BETWEEN 1 AND 5 THEN 'Weekday'
         WHEN day_number IN (6, 7)        THEN 'Weekend'
       END AS day_type
FROM schedule;

Gestión de NULL: por qué gana el CASE buscado

Un CASE simple usa = internamente, y NULL = NULL nunca es TRUE en SQL. Por eso, un CASE simple no puede encontrar coincidencias con una columna NULL. Un CASE buscado permite escribir WHEN column IS NULL THEN ..., lo que funciona correctamente.

-- Simple CASE: NULL branch never matches
SELECT CASE manager_id
         WHEN NULL THEN 'No manager'   -- this will NEVER fire
         ELSE 'Has manager'
       END
FROM employees;

-- Searched CASE: correct NULL check
SELECT CASE
         WHEN manager_id IS NULL THEN 'No manager'
         ELSE 'Has manager'
       END AS manager_status
FROM employees;

Combinar columnas en un CASE buscado

Una gran ventaja del CASE buscado es que cada rama WHEN puede hacer referencia a columnas completamente distintas o llamar a funciones. Esto permite expresar reglas de negocio complejas que un CASE simple no puede gestionar en absoluto.

SELECT
  customer_name,
  total_orders,
  total_spent,
  CASE
    WHEN total_spent > 10000 AND total_orders > 20 THEN 'VIP'
    WHEN total_spent > 5000                        THEN 'Gold'
    WHEN total_orders > 10                         THEN 'Silver'
    ELSE 'Standard'
  END AS tier
FROM customers;

Usar CASE en ORDER BY

Ambas formas de CASE pueden aparecer dentro de ORDER BY para crear un orden personalizado que no existe en los datos. Aquí, un CASE simple asigna números a los nombres de prioridad, de modo que las filas se ordenan según la prioridad de negocio y no alfabéticamente.

SELECT ticket_id, subject, priority
FROM support_tickets
ORDER BY
  CASE priority
    WHEN 'critical' THEN 1
    WHEN 'high'     THEN 2
    WHEN 'medium'   THEN 3
    WHEN 'low'      THEN 4
    ELSE 5
  END ASC;

CASE dentro de funciones de agregación

Envolver un CASE buscado dentro de SUM o COUNT es un patrón clásico de agregación condicional, a veces denominado tabla dinámica. Permite obtener los totales de varias categorías en un solo recorrido, en lugar de ejecutar varias consultas.

SELECT
  department,
  COUNT(*) AS total_employees,
  SUM(CASE WHEN gender = 'F' THEN 1 ELSE 0 END) AS female_count,
  SUM(CASE WHEN gender = 'M' THEN 1 ELSE 0 END) AS male_count,
  SUM(CASE WHEN salary > 70000 THEN salary ELSE 0 END) AS high_earner_payroll
FROM employees
GROUP BY department;

Elegir la forma adecuada

Una regla práctica:

Use CASE simple cuando asigne una sola columna a un conjunto fijo de valores conocidos: es más corto y fácil de leer.
Use CASE buscado para todo lo demás: rangos, comprobaciones de NULL, lógica que involucre varias columnas o llamadas a funciones dentro de las condiciones.

En caso de duda, el CASE buscado siempre funciona. Incluso puede reescribir cualquier CASE simple como un CASE buscado, pero no al revés.

-- These two queries return identical results

-- Simple CASE (concise for equality)
SELECT CASE region_code
         WHEN 'US' THEN 'United States'
         WHEN 'UK' THEN 'United Kingdom'
         ELSE 'International'
       END AS region_name
FROM sales;

-- Equivalent Searched CASE
SELECT CASE
         WHEN region_code = 'US' THEN 'United States'
         WHEN region_code = 'UK' THEN 'United Kingdom'
         ELSE 'International'
       END AS region_name
FROM sales;

Comprobación rápida

Compruebe su comprensión del CASE simple y el CASE buscado.

Repaso de la lección

Esto es lo que aprendió en esta lección:

CASE simple: coloque una expresión después de CASE; cada WHEN comprueba si esa expresión es igual a un valor específico. Es ideal para asignar una sola columna a una lista fija de etiquetas.

CASE buscado: no hay ninguna expresión después de CASE; cada WHEN contiene una condición booleana completa. Admite rangos, comprobaciones de NULL, lógica que involucre varias columnas y llamadas a funciones.

Ambas formas evalúan las ramas de arriba abajo y devuelven el resultado de la primera rama TRUE. Cuando ninguna rama coincide y no hay ELSE, el resultado es NULL. Para obtener la máxima flexibilidad, el CASE buscado siempre es una opción segura: puede hacer todo lo que hace el CASE simple y mucho más.

Gratis para empezar

Aprende SQL con un tutor de IA — gratis

Escribe y ejecuta código real en tu navegador, obtén ayuda instantánea de un tutor de IA disponible 24/7 y continúa donde lo dejaste en la web o en la aplicación.

Cursos
46
Lecciones
183

Preguntas frecuentes

¿La lección «CASE buscado frente a CASE simple» es gratis?

Sí — el texto completo de «CASE buscado frente a CASE simple» es gratis para leer aquí en la web. Para practicarla de forma interactiva (editor de código integrado y tutor de IA 24/7) y desbloquear el resto del curso de SQL Academy, actualiza a CoddyKit PRO. El curso de SQL Academy incluye 4 lecciones en total.

¿Qué aprenderé en «CASE buscado frente a CASE simple»?

Dos formas de escribir CASE Practicas SQL Academy con código real que ejecutas directamente en el navegador, y un tutor de IA 24/7 responde tus preguntas mientras trabajas en la lección.

¿Necesito experiencia previa para empezar SQL Academy?

No se requiere experiencia previa. SQL Academy en CoddyKit está estructurado para principiantes hasta estudiantes avanzados, así que puedes empezar aquí o desde el inicio y avanzar a tu ritmo. Esta es la lección 2 de 4.

¿Cuánto tiempo toma la lección «CASE buscado frente a CASE simple»?

La mayoría de las lecciones de CoddyKit toman alrededor de 5–10 minutos. Cada una es compacta e interactiva, así que avanzas constantemente y retomas exactamente por donde dejaste en la web y la app.

¿Puedo escribir y ejecutar código en esta lección de SQL Academy?

Sí. Cada lección de SQL Academy incluye un editor de código integrado, así que escribes y ejecutas código real directamente en tu navegador y obtienes retroalimentación instantánea de IA — sin configuración local necesaria.

Todas las lecciones de este curso

  1. La expresión CASE
  2. CASE buscado frente a CASE simple
  3. Agrupación y etiquetado de datos
  4. CASE en ORDER BY y agregaciones
← Volver a SQL Academy