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 |
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
- Ordena bien las condiciones: pon primero las condiciones más probables
- Evita evaluaciones redundantes: CASE se evalúa secuencialmente; cuando una condición coincide, se detiene
- Indexa las columnas adecuadas: si CASE usa comparaciones de columnas, los índices pueden ayudar
- Considera columnas calculadas: para lógica CASE usada con frecuencia, algunas bases de datos admiten columnas calculadas indexadas
Resumen
CASEañ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.