Tema SQL
CASE (expresión condicional)
Expresión que devuelve un único valor por fila según condiciones evaluadas en orden. Equivale a if/else en lenguajes imperativos pero dentro del lenguaje declarativo SQL.
Descripción
CASE tiene forma «buscada» (WHEN condición THEN valor …) o «simple» (CASE expr WHEN valor …). Todas las ramas deben devolver tipos compatibles o el motor inserta conversiones implícitas. El primer WHEN que sea verdadero determina el resultado; ELSE es opcional y, si falta, suele implicar NULL. Puedes anidar CASE o usarlo en ORDER BY para orden personalizado. Evita duplicar lógica costosa: a veces conviene precalcular en CTE.
Estructura general
Forma habitual de la sentencia: orden de cláusulas, qué parte filtra, agrupa o proyecta columnas, y qué devuelve el motor. Cópiala como plantilla y sustituye nombres por tus tablas reales.
CASE
WHEN condición1 THEN resultado1
WHEN condición2 THEN resultado2
[ ELSE resultado_default ]
END
Componentes
Cada componente tiene un papel concreto en la ejecución lógica de la sentencia. Léelos en orden: así entiendes qué puedes omitir, qué es obligatorio y qué expresiones son válidas en cada sitio según tu motor.
- CASE simple / buscado
- Buscado: cada WHEN es una condición booleana. Simple: compara una expresión contra valores en WHEN.
- ELSE
- Valor por defecto si ningún WHEN se cumple; sin ELSE y sin coincidencia, el resultado de la expresión CASE es NULL.
Ejemplos
Ejemplo 1
SELECT nombre,
CASE WHEN salario >= 50000 THEN 'alto' ELSE 'medio' END AS banda
FROM empleados;
Ejemplo 2
SELECT CASE WHEN 1=1 THEN 'ok' ELSE 'no' END;
Los ejemplos son ilustrativos. En producción usa consultas parametrizadas (prepared statements), revisa índices y aplica el principio de menor privilegio en cuentas de base de datos.