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

  1. Ordena las condiciones con criterio — 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 soportan 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 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.