...

CASE en SQL: agrega lógica condicional a tus consultas

Cuando trabajamos con SQL, a veces necesitamos crear condiciones dentro de una misma consulta, similar a un IF-ELSE en programación.
Esto es muy común en reportes, como:

  • Clasificar empleados según su rango salarial.
  • Mostrar texto en lugar de valores numéricos.
  • Aplicar reglas de negocio directamente en la consulta.

Para resolver esto, SQL nos ofrece la cláusula CASE, una herramienta poderosa que permite aplicar lógica condicional sin necesidad de modificar datos en la base.

En este artículo aprenderás:

  • Cómo funciona la estructura básica de CASE.
  • Ejemplos prácticos aplicados a reportes reales.
  • Diferencias entre motores como SQL Server, PostgreSQL y MySQL.
  • Buenas prácticas y consideraciones de rendimiento.

Todos los ejemplos podrás ejecutarlos en db-fiddle.com para practicar.


¿Qué es CASE en SQL?

El CASE es una expresión condicional que permite devolver un valor específico dependiendo de ciertas condiciones.
Se parece a un IF-THEN-ELSE y puede usarse en:

  • Cláusulas SELECT (para crear columnas calculadas).
  • Cláusulas ORDER BY (para ordenar según reglas personalizadas).
  • Cláusulas WHERE y HAVING (para filtrar según lógica condicional).

Sintaxis básica de CASE

Existen dos formas principales:

1. CASE simple (comparación directa con un valor)

CASE columna
    WHEN valor1 THEN resultado1
    WHEN valor2 THEN resultado2
    ELSE resultado_por_defecto
END

2. CASE buscado (con condiciones más flexibles)

CASE
    WHEN condición1 THEN resultado1
    WHEN condición2 THEN resultado2
    ELSE resultado_por_defecto
END

💡 El ELSE es opcional.
Si no se incluye y ninguna condición se cumple, CASE devuelve NULL.


Datos base para los ejemplos

Utilizaremos las tablas empleados y departamentos definidas previamente:

SELECT * FROM empleados;
id_empleadonombrepuestosalariofecha_contratacionid_departamento
1Ana TorresGerente de Ventas900002019-01-151
2Luis PérezEjecutivo de Ventas650002020-03-101
3Carlos LópezAnalista Financiero600002021-06-253
4Marta DíazEspecialista Marketing720002018-09-052
5Pedro GarcíaDesarrollador Backend800002022-01-184
6Sofía RuizDesarrollador Frontend800002022-02-104
9Raúl HerreraAuxiliar RH400002021-11-225

Ejemplo 1: Clasificar empleados por rango salarial

Queremos asignar una categoría según el salario:

  • Alto: salario ≥ 80,000
  • Medio: salario entre 60,000 y 79,999
  • Bajo: salario < 60,000
SELECT nombre,
       salario,
       CASE
           WHEN salario >= 80000 THEN 'Alto'
           WHEN salario BETWEEN 60000 AND 79999 THEN 'Medio'
           ELSE 'Bajo'
       END AS categoria_salarial
FROM empleados
ORDER BY salario DESC;

Resultado:

nombresalariocategoria_salarial
Ana Torres90000Alto
Pedro García80000Alto
Sofía Ruiz80000Alto
Marta Díaz72000Medio
Luis Pérez65000Medio
Carlos López60000Medio
Raúl Herrera40000Bajo

Ejemplo 2: Mostrar texto en lugar de valores NULL

Queremos que, si un empleado no tiene departamento asignado, se muestre “Sin asignar”.

SELECT nombre,
       CASE
           WHEN id_departamento IS NULL THEN 'Sin asignar'
           ELSE CAST(id_departamento AS TEXT)
       END AS departamento
FROM empleados;

🔹 En SQL Server podrías usar CAST(id_departamento AS VARCHAR).


Ejemplo 3: CASE dentro de ORDER BY

Queremos ordenar empleados priorizando:

  • Primero los de departamento 4 (Desarrollo).
  • Después los demás, ordenados por salario descendente.
SELECT nombre, id_departamento, salario
FROM empleados
ORDER BY
    CASE
        WHEN id_departamento = 4 THEN 1
        ELSE 2
    END,
    salario DESC;

Ejemplo 4: Uso de CASE en WHERE

Queremos filtrar empleados de acuerdo a una condición dinámica:

  • Si el departamento es 1 (Ventas), incluir empleados con salario > 70,000.
  • En otros departamentos, incluir empleados con salario > 60,000.
SELECT nombre, id_departamento, salario
FROM empleados
WHERE salario >
    CASE
        WHEN id_departamento = 1 THEN 70000
        ELSE 60000
    END;

Buenas prácticas

  1. Mantén tus CASE simples y claros: demasiadas condiciones dificultan el mantenimiento.
  2. Agrega siempre ELSE: incluso si solo devuelves NULL, para dejar claro el comportamiento.
  3. Optimiza el orden de las condiciones: las más probables o restrictivas primero.
  4. Revisa compatibilidad entre motores:
    • SQL Server y PostgreSQL permiten usar CASE en casi cualquier parte de la consulta.
    • MySQL y SQLite también soportan CASE, pero asegúrate de los tipos de datos devueltos.

Diferencias entre motores

Motor SQLNotas importantes
SQL ServerUsa VARCHAR en lugar de TEXT. CASE soportado en SELECT, WHERE, ORDER BY.
PostgreSQLGran flexibilidad. Permite tipos mixtos pero conviene CAST explícito.
MySQLIgual que PostgreSQL, cuidado con el orden de evaluación.
SQLiteMuy compatible, perfecto para pruebas.

Conclusión

El CASE es una herramienta clave para crear lógica condicional dentro de tus consultas SQL.
Te permite construir reportes dinámicos, simplificar reglas de negocio y hacer tus consultas mucho más flexibles.

Practica los ejemplos en db-fiddle.com y empieza a integrarlo en tus reportes diarios.

Deja un comentario

Seraphinite AcceleratorOptimized by Seraphinite Accelerator
Turns on site high speed to be attractive for people and search engines.