Sentencia condicional IF…ELSE de SQL Server: Ejemplo de selección en T-SQL
⚡ Resumen inteligente
IF…ELSE es una instrucción de control de flujo en SQL Server que ejecuta un bloque de T-SQL cuando una condición booleana se evalúa como verdadera, y un bloque alternativo opcional cuando la misma condición se evalúa como falsa.

¿Por qué necesitas declaraciones condicionales?
Las sentencias condicionales en SQL Server permiten definir lógica y acciones distintas para diferentes condiciones. Permiten realizar distintas acciones en función de las condiciones definidas en la sentencia. En la vida real, realizamos muchas acciones que dependen del resultado de alguna otra actividad o situación.
Algunos ejemplos en tiempo real de una sentencia condicional son:
- Si llueve mañana, planearé un viaje por carretera.
- Si los billetes de avión cuestan menos de 400 dólares desde mi ciudad, me iré de vacaciones a Europa; de lo contrario, preferiré un lugar turístico cercano.
Aquí se puede observar que una acción, como el viaje por carretera mencionado anteriormente, depende condicionalmente del resultado de otra actividad, que es "si lloverá o no mañana". De manera similar, MS SQL Server También ofrece la capacidad de ejecutar una instrucción T-SQL de forma condicional.
Sentencia IF…ELSE en SQL Server
En MS SQL, IF…ELSE es un tipo de instrucción condicional. Cualquier instrucción T-SQL puede ejecutarse condicionalmente mediante IF…ELSE. La siguiente figura explica cómo funcionan las ramas IF y ELSE en SQL Server:
- Si la condición se evalúa como verdadera, se ejecutan las instrucciones T-SQL que siguen a la condición IF en SQL Server.
- Si la condición se evalúa como falsa, se ejecutan las instrucciones T-SQL que siguen a la palabra clave ELSE.
- Una vez que se ejecuta la instrucción IF de T-SQL o la instrucción ELSE de T-SQL, las demás instrucciones T-SQL incondicionales continúan su ejecución.
Sintaxis y reglas de IF…ELSE en SQL
Sintaxis:
IF <Condition> {Statement | Block_of_statement} [ ELSE {Statement | Block_of_statement}]
Reglas:
- La condición debe ser una expresión booleana, es decir, la condición debe dar como resultado un valor booleano cuando se evalúa.
- En SQL, una instrucción IF…ELSE puede manejar condicionalmente una sola instrucción T-SQL o un bloque de instrucciones T-SQL.
- Un bloque de instrucciones debe comenzar con la palabra clave BEGIN y terminar con la palabra clave END.
- El uso de BEGIN y END ayuda a SQL Server a identificar el bloque de instrucciones que debe ejecutarse y separarlo del resto de las instrucciones T-SQL que no forman parte del bloque T-SQL IF…ELSE.
- MÁS es opcional.
SI… SI NO con solo un valor numérico en la expresión booleana
En este primer ejemplo, la expresión booleana utiliza únicamente valores numéricos. Considere la siguiente condición, que siempre es verdadera porque 1 es igual a 1.
Condición: VERDADERO
IF (1=1) PRINT 'IF STATEMENT: CONDITION IS TRUE' ELSE PRINT 'ELSE STATEMENT: CONDITION IS FALSE'
Al ejecutar la consulta con la condición verdadera (1=1) se imprime el mensaje de la rama IF:
Condición: FALSO
IF (1=2) PRINT 'IF STATEMENT: CONDITION IS TRUE' ELSE PRINT 'ELSE STATEMENT: CONDITION IS FALSE'
En caso de que la condición sea falsa (1=2), se ejecuta la rama ELSE:
Supongamos que tienes una tabla llamada 'Guru99' con dos columnas y cuatro filas, como se muestra a continuación. Usaremos este 'GuruTabla 99' en los ejemplos que siguen.
SI…SINO con una variable en una expresión booleana
En lugar de números constantes, la expresión booleana puede comparar un variableEl siguiente ejemplo declara una variable entera y comprueba su valor.
Condición: VERDADERO
DECLARE @Course_ID INT = 4 IF (@Course_ID = 4) Select * from Guru99 where Tutorial_ID = 4 ELSE Select * from Guru99 where Tutorial_ID != 4
Como @Course_ID es igual a 4, la rama IF se ejecuta y devuelve la fila donde Tutorial_ID es 4:
Condición: FALSO
DECLARE @Course_ID INT = 4 IF (@Course_ID != 4) Select * from Guru99 where Tutorial_ID = 4 ELSE Select * from Guru99 where Tutorial_ID != 4
Aquí la condición es falsa, por lo que la rama ELSE se ejecuta y devuelve todas las filas donde Tutorial_ID no es 4:
SI… SI NO con COMIENZO… FIN
Cuando una rama deba ejecutar más de una instrucción, envuelva las instrucciones en un bloque BEGIN…END. El siguiente ejemplo ejecuta dos instrucciones SELECT en cada rama.
Condición: VERDADERO
DECLARE @Course_ID INT = 2 IF (@Course_ID <=2) BEGIN Select * from Guru99 where Tutorial_ID = 1 Select * from Guru99 where Tutorial_ID = 2 END ELSE BEGIN Select * from Guru99 where Tutorial_ID = 3 Select * from Guru99 where Tutorial_ID = 4 END
Dado que @Course_ID es menor o igual a 2, el bloque IF ejecuta ambas sentencias SELECT dentro de BEGIN…END:
Condición: FALSO
DECLARE @Course_ID INT = 2 IF (@Course_ID >=3) BEGIN Select * from Guru99 where Tutorial_ID = 1 Select * from Guru99 where Tutorial_ID = 2 END ELSE BEGIN Select * from Guru99 where Tutorial_ID = 3 Select * from Guru99 where Tutorial_ID = 4 END
En este caso, la condición es falsa, por lo que el bloque ELSE ejecuta sus dos sentencias SELECT:
Sentencia IF sin ELSE
En SQL, puedes usar una instrucción IF sin la parte ELSE, ya que esta última es opcional. Por ejemplo:
DECLARE @Course_ID INT = 2 IF (@Course_ID <=2) Select * from Guru99 where Tutorial_ID = 1
Imprime la siguiente fila única:
La ejecución de la condición falsa no produce ningún resultado. Considere la siguiente consulta:
DECLARE @Course_ID INT = 2 IF (@Course_ID <=0) Select * from Guru99 where Tutorial_ID = 1
El resultado está vacío, como se muestra a continuación:
Sentencias IF…ELSE anidadas
A diferencia de otros lenguajes de programaciónSQL Server no proporciona una instrucción ELSE IF dentro de una condición IF…ELSE. En su lugar, puede anidar una condición IF…ELSE dentro de otra, como se muestra a continuación:
DECLARE @age INT; SET @age = 60; IF @age < 18 PRINT 'underage'; ELSE BEGIN IF @age < 50 PRINT 'You are below 50'; ELSE PRINT 'Senior'; END;
Para una edad de 60 años, la estructura IF…ELSE anidada imprime el siguiente resultado:
- El código imprime 'menor de edad' si el valor de @age es menor de 18 años.
- De lo contrario, se ejecuta la parte ELSE. La parte ELSE contiene un IF…ELSE anidado.
- Si el valor de @age es menor de 50, se imprime 'Tienes menos de 50 años'. Si ninguna de estas condiciones se cumple, el código imprime 'Senior'.











