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.

  • 🧭 Lógica condicional: Las sentencias condicionales permiten que SQL Server ejecute diferentes acciones T-SQL dependiendo de si una condición es verdadera o falsa.
  • Ramas IF y ELSE: Cuando la condición booleana es verdadera, se ejecuta el bloque IF; cuando es falsa, se ejecuta el bloque ELSE opcional.
  • 🔢 Expresión booleana: La condición debe ser una expresión booleana que se evalúe como verdadera o falsa, como (1=1) o una comparación de variables.
  • 🧱 bloques INICIO…FIN: Una rama que ejecuta más de una instrucción debe encerrar esas instrucciones entre las palabras clave BEGIN y END.
  • ELSE es opcional: Una instrucción IF puede funcionar de forma independiente sin una parte ELSE, por lo que una condición falsa simplemente no produce ninguna acción.
  • 🔁 Condiciones anidadas: SQL Server no tiene la palabra clave ELSE IF, por lo que se anida un IF…ELSE dentro de otro para probar múltiples umbrales.

Ejemplos de sentencias condicionales IF…ELSE de SQL Server con consultas SELECT de T-SQL

¿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:

Diagrama de flujo de la instrucción IF…ELSE de SQL Server que muestra la rama IF verdadera y la rama ELSE falsa.

  • 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:

Resultado de la condición IF numérica verdadera que imprime el mensaje INSTRUCCIÓN 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:

Resultado de la condición IF numérica falsa que imprime el mensaje ELSE STATEMENT

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.

Muestra GuruTabla 99 que contiene una columna Tutorial_ID y cuatro filas de datos.

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:

El resultado de la consulta devuelve la fila Tutorial_ID 4 cuando la condición de la variable es verdadera.

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:

El resultado de la consulta de la rama ELSE devuelve todas las filas excepto Tutorial_ID 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:

Resultado del bloque IF que ejecuta dos sentencias SELECT para Tutorial_ID 1 y 2.

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:

Resultado del bloque ELSE que ejecuta dos sentencias SELECT para Tutorial_ID 3 y 4.

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:

Resultado de una sola fila impreso por una instrucción IF que no tiene parte ELSE.

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:

Se produce un conjunto de resultados vacío cuando la condición IF sin ELSE es falsa.

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:

Resultado de la impresión IF…ELSE anidada Senior para una edad de 60

  • 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'.

Preguntas Frecuentes

La instrucción IF…ELSE controla el flujo de ejecución, decidiendo qué instrucciones o bloques T-SQL ejecutar. CASE es una expresión que devuelve un único valor dentro de una consulta, como en una cláusula SELECT o WHERE. CASE no puede ejecutar instrucciones separadas.

IIF() es una abreviatura de una expresión CASE, no de la instrucción de control de flujo IF…ELSE. Devuelve uno de dos valores según una prueba booleana y se utiliza dentro de las consultas. A diferencia de IF…ELSE, IIF() no puede ejecutar instrucciones o bloques T-SQL independientes.

No. La instrucción IF…ELSE es una instrucción de control de flujo, por lo que no puede aparecer dentro de una lista SELECT ni de una cláusula WHERE. Para devolver valores condicionales dentro de una consulta, utilice una expresión CASE o la función IIF().

Escriba IF EXISTS (SELECT 1 FROM tabla WHERE condición) seguido de la instrucción a ejecutar. EXISTS devuelve verdadero cuando la subconsulta encuentra al menos una fila coincidente, por lo que la rama IF se ejecuta solo cuando existen los datos.

Sí. La estructura IF…ELSE se utiliza dentro de procedimientos almacenados, disparadores, funciones y lotes para ramificar la lógica. Combinada con los bloques BEGIN…END, permite que un procedimiento ejecute diferentes sentencias SQL según los parámetros o los resultados de la consulta.

La estructura IF…ELSE evalúa su condición una sola vez y ejecuta la rama correspondiente una sola vez. Un bucle WHILE repite su bloque de instrucciones mientras la condición sea verdadera. Utilice IF…ELSE para bifurcaciones y WHILE para iteraciones.

Sí. Copiloto de GitHub Puede generar bloques IF…ELSE, estructuras BEGIN…END y condiciones anidadas a partir de una solicitud en lenguaje natural. Siempre revise las condiciones booleanas generadas y la lógica de ramificación antes de ejecutar el script en su base de datos.

Los asistentes de IA y aprendizaje automático traducen reglas en lenguaje natural a lógica condicional (SI…SINO) o condicional (CASE), sugieren ramas faltantes e indican condiciones que nunca pueden ser verdaderas. El desarrollador revisa cada sugerencia para verificar su corrección antes de implementarla.

Resumir este post con: