En el vasto mundo de las bases de datos, la capacidad de tomar decisiones basadas en ciertas condiciones es fundamental. No siempre queremos aplicar la misma lógica a todos los datos; a menudo necesitamos que nuestras consultas o scripts reaccionen de manera diferente según el valor de un dato o el cumplimiento de un criterio. Aquí es donde entra en juego la lógica condicional en SQL, permitiéndonos añadir inteligencia a nuestras interacciones con la base de datos. Las herramientas principales para lograr esto son la declaración IF y la expresión CASE, cada una con su propósito y contexto de uso específico.

Comprender cómo y cuándo utilizar IF y CASE es crucial para escribir código SQL eficiente, flexible y potente. Nos permiten ir más allá de la simple recuperación o modificación de datos, habilitando la creación de lógica compleja directamente dentro de la base de datos.
La Declaración IF en SQL: Controlando el Flujo
La declaración IF en SQL se utiliza principalmente para controlar el flujo de ejecución en bloques de código procedural, como los que se encuentran en procedimientos almacenados, disparadores (triggers) o scripts de lotes (batches). Permite ejecutar un conjunto de sentencias si una condición es verdadera y, opcionalmente, otro conjunto si es falsa.
Piensa en IF como un guarda que decide qué camino seguir en tu código. Evalúa una expresión booleana y, basándose en el resultado (verdadero o falso), dirige la ejecución hacia un bloque de sentencias u otro.
Sintaxis Básica de IF
La sintaxis general de un IF simple es la siguiente:
IF (condición_booleana) BEGIN -- Sentencias a ejecutar si la condición es VERDADERA END;La condición_booleana es una expresión que se evalúa como VERDADERA o FALSA. Si la condición es VERDADERA, se ejecutan las sentencias dentro del bloque BEGIN...END. Si es FALSA, el bloque se omite.
IF...ELSE: Decidiendo Entre Dos Caminos
A menudo, necesitas especificar qué hacer tanto si la condición es verdadera como si es falsa. Para esto, se utiliza la cláusula ELSE:
IF (condición_booleana) BEGIN -- Sentencias a ejecutar si la condición es VERDADERA END ELSE BEGIN -- Sentencias a ejecutar si la condición es FALSA END;En este caso, si la condición_booleana es VERDADERA, se ejecuta el primer bloque BEGIN...END. Si es FALSA, se ejecuta el bloque dentro del ELSE.
IF...ELSE IF: Evaluando Múltiples Condiciones
Cuando tienes más de dos posibles resultados o necesitas verificar múltiples condiciones en secuencia, puedes encadenar declaraciones IF utilizando ELSE IF. Es importante notar que la sintaxis varía ligeramente entre sistemas de gestión de bases de datos (SGBD), pero el concepto es el mismo: evaluar condiciones una por una hasta encontrar una que sea verdadera.
Aquí tienes un ejemplo conceptual que ilustra la idea (la sintaxis exacta puede requerir anidamiento de IF/ELSE en algunos SGBD o usar una estructura más lineal en otros como T-SQL):
IF (condición_1) BEGIN -- Sentencias si condición_1 es VERDADERA END ELSE IF (condición_2) BEGIN -- Sentencias si condición_1 es FALSA y condición_2 es VERDADERA END ELSE BEGIN -- Sentencias si ninguna de las condiciones anteriores es VERDADERA END;Las condiciones se evalúan en orden. Tan pronto como se encuentra una condición VERDADERA, se ejecuta el bloque de sentencias asociado y se sale de la estructura IF...ELSE IF. El bloque ELSE final es opcional y actúa como un caso por defecto si ninguna de las condiciones anteriores es VERDADERA.

Ejemplo Práctico de IF (Procedural)
Imagina que quieres actualizar el estado de un pedido en una tabla `Pedidos` basándote en su valor total. Podrías usar un IF dentro de un procedimiento almacenado:
DECLARE @TotalPedido DECIMAL(10, 2); DECLARE @IDPedido INT = 101; SELECT @TotalPedido = Total FROM Pedidos WHERE IDPedido = @IDPedido; IF (@TotalPedido > 100.00) BEGIN UPDATE Pedidos SET Estado = 'VIP' WHERE IDPedido = @IDPedido; PRINT 'Pedido marcado como VIP.'; END ELSE BEGIN UPDATE Pedidos SET Estado = 'Regular' WHERE IDPedido = @IDPedido; PRINT 'Pedido marcado como Regular.'; END;Este ejemplo simple muestra cómo IF controla qué sentencia UPDATE se ejecuta basándose en el valor de la variable @TotalPedido. Es un control de flujo clásico.
La Expresión CASE: El 'IF' para Consultas
Mientras que la declaración IF es ideal para el control de flujo en scripts procedurales, no puedes usarla directamente para devolver valores condicionales dentro de una sentencia SELECT, UPDATE, INSERT, etc. Para eso, SQL proporciona la expresión CASE. La expresión CASE es la forma estándar de SQL para manejar la lógica IF/THEN/ELSE dentro de las consultas. Evalúa una serie de condiciones y devuelve un valor único para cada fila basándose en la primera condición que se cumple.
Piensa en CASE como una función que transforma datos en función de reglas. Puedes usarla en la cláusula SELECT para mostrar valores diferentes, en la cláusula WHERE para filtrar condicionalmente, o en las cláusulas GROUP BY y ORDER BY.
Sintaxis de la Expresión CASE
Hay dos formas principales de la expresión CASE: la forma simple y la forma buscada.
Forma Simple: Compara una expresión con un conjunto de valores posibles.
CASE expresión_entrada WHEN valor_1 THEN resultado_1 WHEN valor_2 THEN resultado_2 -- ... más WHENs ELSE resultado_por_defecto -- Opcional ENDForma Buscada: Evalúa un conjunto de expresiones booleanas.
CASE WHEN condición_1 THEN resultado_1 WHEN condición_2 THEN resultado_2 -- ... más WHENs ELSE resultado_por_defecto -- Opcional ENDLa forma buscada es más flexible, ya que cada WHEN puede tener su propia condición independiente. Es la forma más común para implementar lógica similar a IF/THEN/ELSE en consultas.
En ambas formas, la expresión CASE evalúa las cláusulas WHEN en orden. Devuelve el resultado asociado a la primera condición (o valor) que se cumple. Si ninguna condición se cumple y se especifica una cláusula ELSE, se devuelve el resultado_por_defecto. Si no se especifica ELSE y ninguna condición se cumple, el resultado es NULL.

Ejemplos de Uso de CASE en Consultas
Ejemplo 1: Clasificar datos en la cláusula SELECT
Clasificar clientes por grupo de edad basándose en su edad:
SELECT Nombre, Edad, CASE WHEN Edad >= 18 THEN 'Adulto' ELSE 'Menor' END AS GrupoEdad FROM Clientes;Aquí, la expresión CASE evalúa la edad de cada cliente y asigna 'Adulto' o 'Menor' a una nueva columna llamada `GrupoEdad`. Esto es algo que no podrías hacer fácilmente con una declaración IF en una consulta SELECT simple.
Ejemplo 2: Múltiples condiciones con CASE
Clasificar productos por categoría de precio:
SELECT NombreProducto, Precio, CASE WHEN Precio > 100.00 THEN 'Caro' WHEN Precio > 50.00 AND Precio <= 100.00 THEN 'Moderado' ELSE 'Barato' END AS CategoriaPrecio FROM Productos;Este ejemplo muestra cómo encadenar múltiples cláusulas WHEN para manejar diferentes rangos. Es crucial que las condiciones no se solapen (o si lo hacen, entender que se evalúan en orden) para obtener el resultado esperado.
Ejemplo 3: CASE con Funciones de Agregación
Contar condicionalmente filas o sumar valores basándose en criterios es una aplicación muy potente de CASE. Dado que las funciones de agregación como COUNT, SUM, AVG, etc., ignoran los valores NULL, podemos usar CASE para devolver NULL o un valor (como 1 o el valor a sumar) según la condición.
Contar el número de pedidos 'Pendiente' y 'Completado' en una sola consulta:
SELECT COUNT(CASE WHEN Estado = 'Pendiente' THEN 1 ELSE NULL END) AS TotalPendientes, COUNT(CASE WHEN Estado = 'Completado' THEN 1 ELSE NULL END) AS TotalCompletados, COUNT(*) AS TotalPedidos FROM Pedidos;En este caso, COUNT(CASE WHEN Estado = 'Pendiente' THEN 1 ELSE NULL END) solo cuenta las filas donde el estado es 'Pendiente', porque la expresión CASE devuelve 1 para esas filas y NULL para las demás, y COUNT ignora los NULL. Esta técnica es fundamental para la agregación condicional y la "pivotación" de datos (mostrar datos agregados por categorías en columnas separadas).
Otro ejemplo de agregación condicional, sumando el total de pedidos por estado:
SELECT SUM(CASE WHEN Estado = 'Pendiente' THEN Total ELSE 0 END) AS SumaPendientes, SUM(CASE WHEN Estado = 'Completado' THEN Total ELSE 0 END) AS SumaCompletados FROM Pedidos;Aquí usamos 0 en la cláusula ELSE porque SUM no ignora NULLs de la misma manera que COUNT (sumar NULL con un número da NULL en la mayoría de los SQL, aunque algunos SGBD pueden tratar NULL como 0 en SUM; usar 0 es más seguro).
IF vs. CASE: ¿Cuándo Usar Cuál?
Aunque ambos permiten lógica condicional, IF y CASE se utilizan en contextos diferentes en SQL.
Aquí tienes una tabla comparativa para aclarar sus usos:
| Característica | Declaración IF | Expresión CASE |
|---|---|---|
| Contexto Principal | Código procedural (procedimientos almacenados, triggers, scripts) | Consultas (SELECT, UPDATE, INSERT, WHERE, GROUP BY, ORDER BY) |
| Propósito | Control de flujo de ejecución (decidir qué bloque de código ejecutar) | Devolver un valor condicional (basado en condiciones) |
| Resultado | No devuelve un valor directamente; ejecuta sentencias | Devuelve un único valor (escalar) |
| Dónde Usar | Bloques de código procedural (fuera de sentencias DML directas) | Dentro de sentencias DML (SELECT list, WHERE clause, JOIN conditions, etc.) |
| Manejo de Múltiples Condiciones | Se encadenan con ELSE IF | Múltiples cláusulas WHEN |
En resumen, usa IF cuando necesites que tu script tome una ruta de ejecución diferente. Usa CASE cuando necesites que una consulta devuelva diferentes valores o agregue datos de forma diferente basándose en condiciones.

Preguntas Frecuentes sobre Lógica Condicional en SQL
¿Es la declaración IF y la expresión CASE lo mismo en SQL?
No, no son lo mismo. Aunque ambos manejan lógica condicional, la declaración IF se usa para controlar el flujo de ejecución en código procedural (como en procedimientos almacenados), mientras que la expresión CASE se usa para devolver valores condicionales dentro de consultas (SELECT, UPDATE, etc.). CASE es una expresión que produce un resultado, IF es una declaración que dirige la ejecución.
¿Puedo usar una declaración IF dentro de una sentencia SELECT?
Generalmente no, no puedes usar la declaración IF de control de flujo directamente dentro de una sentencia SELECT para definir columnas o filtrar. Para eso, debes usar la expresión CASE, que está diseñada para devolver valores dentro de las consultas.
¿Cuándo debería usar CASE en lugar de WHERE?
La cláusula WHERE se usa para filtrar filas *antes* de que se devuelvan o procesen. La expresión CASE se usa para evaluar condiciones *por cada fila* que ya ha sido seleccionada (o está siendo procesada) y devolver un valor o realizar una agregación basada en esa condición. Por ejemplo, usas WHERE para obtener solo clientes mayores de 18 años. Usas CASE en el SELECT para etiquetar a cada cliente como 'Adulto' o 'Menor', independientemente de si seleccionas a todos o solo a un subconjunto.
¿Puedo anidar declaraciones IF o expresiones CASE?
Sí, es posible anidar tanto IF como CASE. Puedes tener una declaración IF dentro de un bloque BEGIN...END de otro IF o ELSE. Del mismo modo, puedes tener una expresión CASE dentro de una cláusula WHEN o ELSE de otra expresión CASE. Sin embargo, anidar en exceso puede hacer el código difícil de leer y mantener.
¿Cuál es el equivalente de IF...ELSE IF en la expresión CASE?
La forma buscada de la expresión CASE con múltiples cláusulas WHEN es el equivalente directo de una estructura IF...ELSE IF para devolver un valor. Cada cláusula WHEN actúa como una condición IF o ELSE IF.
Conclusión
Dominar la lógica condicional es un paso esencial para convertirte en un experto en SQL. La declaración IF te da el poder de controlar el flujo de ejecución en tus scripts procedurales, permitiéndote automatizar tareas complejas y reaccionar a diferentes escenarios de datos. Por otro lado, la expresión CASE es tu herramienta principal para manipular y presentar datos de forma condicional dentro de tus consultas, habilitando desde simples etiquetas basadas en valores hasta sofisticadas agregaciones y pivotaciones.
Entender la diferencia entre estas dos herramientas y saber cuándo aplicar cada una te permitirá escribir código SQL más limpio, eficiente y que se adapte mejor a las necesidades específicas de tus datos y aplicaciones. Practica con ejemplos y experimenta para consolidar tu comprensión de la lógica IF y CASE en SQL.
Si quieres conocer otros artículos parecidos a ¿IF o CASE en SQL? La Lógica Condicional puedes visitar la categoría Bases de datos.

Aprende mas sobre MySQL