estructuras-control-if-else-case

Estructuras condicionales CASE y IF...ELSE

  • 3 min

En T-SQL, las estructuras de control condicional son instrucciones que permiten a un motor de base de datos evaluar expresiones lógicas para decidir qué bloque de código ejecutar o qué valor devolver.

Hasta ahora, nuestros scripts eran secuenciales: línea 1, línea 2, línea 3… Pero la lógica de negocio real necesita bifurcaciones: “Si es fin de mes, calcula nóminas; si no, no hagas nada” o “Si el cliente es VIP, aplica un descuento”.

En T-SQL, tenemos dos herramientas principales para tomar decisiones, pero se usan en contextos muy diferentes: CASE y IF…ELSE.

CASE (Lógica condicional en datos)

El IF sirve para controlar qué sentencias se ejecutan (flujo del programa). El CASE sirve para generar un valor basado en condiciones dentro de una consulta SELECT, UPDATE o DELETE.

CASE es una expresión que devuelve un resultado. Piensa en él como el switch de otros lenguajes o una serie de if-else compactos que ocurren fila a fila.

Existen dos formatos:

Compara una expresión con una lista de valores exactos.

SELECT Nombre, 
    CASE CategoriaID
        WHEN 1 THEN 'Electrónica'
        WHEN 2 THEN 'Ropa'
        WHEN 3 THEN 'Juguetes'
        ELSE 'Otros' -- Valor por defecto si no coincide ninguno
    END AS NombreCategoria
FROM Productos;
Copied!

Permite usar operadores lógicos (>, <, AND, OR) en cada condición. Es mucho más flexible.

SELECT Nombre, Precio,
    CASE 
        WHEN Precio < 10 THEN 'Barato'
        WHEN Precio BETWEEN 10 AND 50 THEN 'Estándar'
        WHEN Precio > 50 THEN 'Premium'
        ELSE 'Sin Clasificar'
    END AS RangoPrecio
FROM Productos;
Copied!

Si ninguna condición se cumple y no has puesto un ELSE, la expresión CASE devolverá NULL. Asegúrate de cubrir todos los casos o definir un ELSE por defecto.

IF…ELSE (Control de flujo)

La estructura IF evalúa una condición lógica (verdadero o falso). Si es verdadera, ejecuta el código siguiente. Si es falsa (y existe un ELSE), ejecuta el código alternativo.

Es idéntico a un IFde cualquier lenguaje de programación

La sintaxis es la siguiente,

DECLARE @Stock INT = 5;

IF @Stock < 10
BEGIN
    PRINT 'El stock es bajo';
    PRINT 'Solicitando reposición...';
    -- Aquí podrías poner un INSERT INTO Pedidos...
END
ELSE
BEGIN
    PRINT 'Stock suficiente';
END
Copied!

La función IIF

Desde SQL Server 2012, tenemos una función llamada IIF (Immediate IF), que es un operador condicional ternario en SQL. (básicamente una forma abreviada de escribir un CASE simple)

La sintaxis es,

IIF(condición, valor_si_true, valor_si_false)
Copied!

O visto en un ejemplo,

SELECT 
    Nombre, 
    IIF(Stock > 0, 'Disponible', 'Agotado') AS Estado
FROM Productos;
Copied!

Internamente, SQL Server traduce esto a una expresión CASE, pero es más rápido de escribir para condiciones simples de “Sí/No”.