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á soportada en todas las bases de datos SQL principales, incluyendo 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 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 para el usuario:
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 según la categoría
Calcula descuentos basados en la categoría del producto:
Ejemplo: Priorizar pedidos por valor y estado
Calcula la prioridad del pedido basándote en múltiples factores:
CASE en agregaciones
Usa CASE dentro de funciones de agregación para crear informes tipo tabla dinámica o conteos 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 diferentes 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 múltiples 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 — 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 soporta tanto CASE como COALESCE, pero no IIF. Usa CASE para la máxima compatibilidad.
Consejos de rendimiento
- Ordena las condiciones con criterio — 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 soportan 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 buscada 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á soportada 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.