Sentencia CASE en SQL: lógica condicional en tus consultas

Published: 2026-02-11

La sentencia CASE es la forma que tiene SQL de añadir lógica condicional a tus consultas. Funciona como una estructura if-then-else, permitiéndote devolver valores diferentes según las condiciones. CASE está disponible en todas las bases de datos SQL principales, incluidas SQLite, PostgreSQL, MySQL, SQL Server y Oracle.

Datos de ejemplo

Usamos dos tablas en todos los ejemplos:

Tabla products:

id name category price stock rating
1 Laptop Pro Electronics 1299.99 15 4.5
2 Wireless Mouse Electronics 29.99 50 4.2
3 Office Chair Furniture 249.99 8 4.7
4 Desk Lamp Furniture 39.99 25 3.9
5 Notebook Pack Stationery 12.99 100 4.0
6 Pen Set Stationery 8.99 75 3.5
7 Monitor 27" Electronics 399.99 0 4.6
8 Standing Desk Furniture 599.99 3 4.8

Tabla orders:

id product_id quantity order_date status
1 1 2 2026-02-01 delivered
2 2 5 2026-02-03 shipped
3 3 1 2026-02-05 processing
4 4 3 2026-02-06 delivered
5 5 10 2026-02-07 shipped
6 1 1 2026-02-08 cancelled
7 7 1 2026-02-09 pending
8 8 1 2026-02-10 processing
Explora el conjunto de datos en DbGate Lite

Expresión CASE simple

La expresión CASE simple compara una columna o expresión con valores específicos. Es concisa cuando solo se comprueba igualdad.

Sintaxis

CASE column_name
  WHEN value1 THEN result1
  WHEN value2 THEN result2
  ELSE default_result
END

Ejemplo: categorizar el estado de los pedidos

Traduce los códigos de estado de pedido a etiquetas fáciles de entender:

Expresión CASE buscada

La expresión CASE buscada evalúa condiciones booleanas, permitiendo comparaciones complejas y rangos.

Sintaxis

CASE
  WHEN condition1 THEN result1
  WHEN condition2 THEN result2
  ELSE default_result
END

Ejemplo: categorías de precio

Clasifica los productos por rango de precio:

Ejemplo: estado de disponibilidad de stock

Determina el estado del inventario con distintos umbrales:

Uso de CASE en cálculos

Las sentencias CASE pueden modificar cálculos, aplicar fórmulas condicionales o manejar valores NULL.

Ejemplo: aplicar descuentos por categoría

Calcula descuentos según la categoría del producto:

Ejemplo: priorizar pedidos por valor y estado

Calcula la prioridad del pedido basándote en varios factores:

CASE en agregaciones

Usa CASE dentro de funciones de agregación para crear informes tipo tabla dinámica o recuentos condicionales.

Ejemplo: contar productos por disponibilidad

Cuenta cuántos productos hay en cada categoría de stock:

Ejemplo: ingresos por categoría y estado

Calcula distintas métricas usando agregación condicional:

CASE en ORDER BY

Usa CASE en ORDER BY para crear lógica de ordenación personalizada.

Ejemplo: orden personalizado

Ordena los productos con prioridad personalizada (sin stock primero, luego por valoración):

Sentencias CASE anidadas

Las expresiones CASE se pueden anidar para lógica más compleja.

Ejemplo: clasificación compleja de productos

Combina varios criterios para una categorización detallada:

Casos de uso comunes de las sentencias CASE

  • Categorización de datos: agrupar valores en rangos o categorías
  • Formateo condicional: mostrar etiquetas o indicadores de estado fáciles de entender
  • Cálculos dinámicos: aplicar distintas fórmulas según las condiciones
  • Creación de tablas dinámicas: combinar con agregaciones para informes de tipo crosstab
  • Ordenación personalizada: definir órdenes específicos para lógica de negocio especial
  • Manejo de valores NULL: reemplazar o marcar datos faltantes
  • Decisiones con múltiples criterios: implementar reglas de negocio complejas en SQL

CASE vs. IIF y COALESCE

  • CASE: lo más flexible, maneja múltiples condiciones
  • IIF(condition, true_value, false_value): sintaxis más simple para una sola condición (SQL Server, Access)
  • COALESCE(val1, val2, …): devuelve el primer valor no NULL (útil para manejar NULL)

SQLite admite tanto CASE como COALESCE, pero no IIF. Usa CASE para la máxima compatibilidad.

Consejos de rendimiento

  1. Ordena bien las condiciones: pon primero las condiciones más probables
  2. Evita evaluaciones redundantes: CASE se evalúa secuencialmente; cuando una condición coincide, se detiene
  3. Indexa las columnas adecuadas: si CASE usa comparaciones de columnas, los índices pueden ayudar
  4. Considera columnas calculadas: para lógica CASE usada con frecuencia, algunas bases de datos admiten columnas calculadas indexadas

Resumen

  • CASE añade lógica condicional a las consultas SQL con comportamiento tipo if-then-else
  • CASE simple compara una columna con valores específicos: CASE column WHEN value THEN result
  • CASE buscado evalúa condiciones booleanas: CASE WHEN condition THEN result
  • Puede usarse en SELECT, WHERE, ORDER BY y funciones de agregación
  • Las expresiones CASE se pueden anidar para árboles de decisión complejos
  • Incluye siempre una cláusula ELSE para manejar valores inesperados
  • Está disponible en todas las bases de datos SQL principales con sintaxis consistente

Prueba a modificar los ejemplos para experimentar con distintas condiciones y ver cómo CASE puede simplificar tu lógica condicional.