Instrução condicional IF…ELSE do SQL Server: Exemplo de seleção em T-SQL

⚡ Resumo Inteligente

IF…ELSE é uma instrução de controle de fluxo no SQL Server que executa um bloco de T-SQL quando uma condição booleana é avaliada como verdadeira e um bloco alternativo opcional quando a mesma condição é avaliada como falsa.

  • 🧭 Lógica condicional: As instruções condicionais permitem que o SQL Server execute diferentes ações T-SQL dependendo se uma condição é verdadeira ou falsa.
  • ✅ Ramificações IF e ELSE: Quando a condição booleana for verdadeira, o bloco IF é executado; quando for falsa, o bloco ELSE opcional é executado em seu lugar.
  • 🔢 Expressão booleana: A condição deve ser uma expressão booleana que avalie como verdadeira ou falsa, como (1=1) ou uma comparação de variáveis.
  • 🧱 Blocos BEGIN…END: Um ramo que executa mais de uma instrução deve envolver essas instruções entre as palavras-chave BEGIN e END.
  • ➖ ELSE é opcional: Uma instrução IF pode funcionar sozinha, sem a parte ELSE, de modo que uma condição falsa simplesmente não produz nenhuma ação.
  • 🔁 Condições aninhadas: O SQL Server não possui a palavra-chave ELSE IF, portanto, você aninha um IF…ELSE dentro de outro para testar vários limites.

Exemplos de instrução condicional IF…ELSE no SQL Server com consulta SELECT em T-SQL

Por que você precisa de declarações condicionais?

As instruções condicionais no SQL Server ajudam você a definir diferentes lógicas e ações para diferentes condições. Elas permitem que você execute ações distintas com base nas condições definidas na instrução. Na vida real, realizamos muitas ações que dependem do resultado de alguma outra atividade ou situação.

Alguns exemplos em tempo real de uma instrução condicional são:

  • Se chover amanhã, vou planejar uma viagem de carro.
  • Se as passagens aéreas da minha cidade custarem menos de 400 dólares, irei passar férias na Europa; caso contrário, darei preferência a um ponto turístico próximo.

Aqui, você pode ver que uma ação, como a viagem de carro acima, depende condicionalmente do resultado de outra atividade, que é "se vai chover ou não amanhã". Da mesma forma, MS SQL Server Também oferece a capacidade de executar uma instrução T-SQL condicionalmente.

Instrução IF…ELSE no SQL Server

Em MS SQL, IF…ELSE é um tipo de instrução condicional. Qualquer instrução T-SQL pode ser executada condicionalmente usando IF…ELSE. A figura abaixo explica como os ramos IF e ELSE funcionam no SQL Server:

Fluxograma da instrução IF…ELSE do SQL Server mostrando o ramo IF verdadeiro e o ramo ELSE falso.

  • Se a condição for avaliada como Verdadeira, as instruções T-SQL que seguem a condição IF no SQL Server serão executadas.
  • Se a condição for avaliada como Falsa, as instruções T-SQL que seguem a palavra-chave ELSE serão executadas.
  • Após a execução das instruções T-SQL IF ou ELSE, as demais instruções T-SQL incondicionais continuam a ser executadas.

Sintaxe e regras do IF…ELSE em SQL

Sintaxe:

IF <Condition>
     {Statement | Block_of_statement}   
[ ELSE   
     {Statement | Block_of_statement}]

Regras:

  • A condição deve ser uma expressão booleana, ou seja, a condição resulta em um valor booleano quando avaliada.
  • Uma instrução IF…ELSE em SQL pode lidar condicionalmente com uma única instrução T-SQL ou com um bloco de instruções T-SQL.
  • Um bloco de instruções deve começar com a palavra-chave BEGIN e terminar com a palavra-chave END.
  • O uso de BEGIN e END ajuda o SQL Server a identificar o bloco de instruções que precisa ser executado e a separá-lo do restante das instruções T-SQL que não fazem parte do bloco IF…ELSE.
  • ELSE é opcional.

IF…ELSE com apenas um valor numérico na expressão booleana

Neste primeiro exemplo, a expressão booleana usa apenas valores numéricos. Considere a condição abaixo, que é sempre verdadeira porque 1 é igual a 1.

Condição: VERDADEIRO

IF (1=1)
PRINT 'IF STATEMENT: CONDITION IS TRUE'
ELSE
PRINT 'ELSE STATEMENT: CONDITION IS FALSE'

Executar a consulta com a condição verdadeira (1=1) imprime a mensagem do ramo IF:

Resultado da condição IF numérica verdadeira imprimindo a mensagem IF STATEMENT

Condição: FALSO

IF (1=2)
PRINT 'IF STATEMENT: CONDITION IS TRUE'
ELSE
PRINT 'ELSE STATEMENT: CONDITION IS FALSE'

Com a condição falsa (1=2), o ramo ELSE é executado em vez disso:

Resultado da condição numérica IF falsa imprimindo a mensagem ELSE STATEMENT

Suponha que você tenha uma tabela chamada 'Guru99' com duas colunas e quatro linhas, conforme mostrado abaixo. Usaremos este 'GuruTabela 99 nos exemplos que se seguem.

Amostra GuruTabela 99 contendo uma coluna Tutorial_ID e quatro linhas de dados.

IF…ELSE com uma variável em uma expressão booleana

Em vez de números constantes, a expressão booleana pode comparar um variávelO exemplo a seguir declara uma variável inteira e testa seu valor.

Condição: VERDADEIRO

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 é igual a 4, o ramo IF é executado e retorna a linha onde Tutorial_ID é 4:

O resultado da consulta retorna a linha Tutorial_ID 4 quando a condição da variável é verdadeira.

Condição: 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

Aqui a condição é falsa, então o ramo ELSE é executado e retorna todas as linhas onde Tutorial_ID não é 4:

O resultado da consulta do ramo ELSE retorna todas as linhas, exceto Tutorial_ID 4.

SE…SENÃO com INÍCIO…FIM

Quando um ramo precisa executar mais de uma instrução, envolva as instruções em um bloco BEGIN…END. O exemplo abaixo executa duas instruções SELECT em cada ramo.

Condição: VERDADEIRO

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

Como @Course_ID é menor ou igual a 2, o bloco IF executa ambas as instruções SELECT dentro de BEGIN…END:

Resultado do bloco IF executando duas instruções SELECT para Tutorial_ID 1 e 2.

Condição: 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

Desta vez, a condição é falsa, portanto o bloco ELSE executa suas duas instruções SELECT:

Resultado do bloco ELSE executando duas instruções SELECT para Tutorial_ID 3 e 4.

Declaração IF sem ELSE

Você pode usar uma instrução IF em SQL sem a parte ELSE, pois a parte ELSE é opcional. Por exemplo:

DECLARE @Course_ID INT = 2

IF (@Course_ID <=2)
	Select * from Guru99 where Tutorial_ID = 1

Ele imprime a seguinte linha única:

Resultado de linha única impresso por uma instrução IF que não possui uma cláusula ELSE.

Executar a condição falsa não produz nenhum resultado. Considere a seguinte consulta:

DECLARE @Course_ID INT = 2

IF (@Course_ID <=0)
	Select * from Guru99 where Tutorial_ID = 1

O resultado é vazio, como mostrado abaixo:

O conjunto de resultados fica vazio quando a condição IF sem ELSE é falsa.

Instruções IF…ELSE aninhadas

Ao contrário de outras linguagens de programaçãoO SQL Server não fornece uma instrução ELSE IF dentro de uma condição IF…ELSE. Em vez disso, você pode aninhar um IF…ELSE dentro de outro, como demonstrado abaixo:

 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 uma idade de 60 anos, a estrutura IF…ELSE aninhada imprime o seguinte resultado:

Resultado da estrutura condicional IF…ELSE aninhada: impressão "Senior" para uma idade de 60 anos.

  • O código imprime 'menor de idade' se o valor de @age for inferior a 18.
  • Caso contrário, a parte ELSE é executada. A parte ELSE contém uma estrutura IF…ELSE aninhada.
  • Se o valor de @age for menor que 50, o código imprime 'Você tem menos de 50 anos'. Se nenhuma dessas condições for verdadeira, o código imprime 'Sênior'.

Perguntas Frequentes

A estrutura IF…ELSE controla o fluxo de execução, escolhendo quais instruções ou blocos T-SQL serão executados. CASE é uma expressão que retorna um único valor dentro de uma consulta, como em uma cláusula SELECT ou WHERE. CASE não pode executar instruções separadas.

IIF() é uma abreviação para uma expressão CASE, não para a instrução de controle de fluxo IF…ELSE. Ela retorna um de dois valores com base em um teste booleano e é usada dentro de consultas. Diferentemente de IF…ELSE, IIF() não pode executar instruções ou blocos T-SQL separados.

Não. A instrução IF…ELSE controla o fluxo de dados, portanto, não pode ser usada dentro de uma lista SELECT ou de uma cláusula WHERE. Para retornar valores condicionais em uma consulta, use uma expressão CASE ou a função IIF().

Escreva IF EXISTS (SELECT 1 FROM tabela WHERE condição) seguido da instrução a ser executada. EXISTS retorna verdadeiro quando a subconsulta encontra pelo menos uma linha correspondente, portanto, o ramo IF é executado somente quando os dados existem.

Sim. A estrutura IF…ELSE é usada em procedimentos armazenados, gatilhos, funções e lotes para ramificar a lógica. Combinada com blocos BEGIN…END, permite que um procedimento execute diferentes instruções SQL dependendo dos parâmetros ou dos resultados da consulta.

A estrutura IF…ELSE avalia sua condição uma única vez e executa o ramo correspondente uma única vez. Um laço WHILE repete seu bloco de instruções enquanto a condição permanecer verdadeira. Use IF…ELSE para ramificação e WHILE para iteração.

Sim. Travas deslizantes portáteis Copiloto do GitHub É possível criar blocos IF…ELSE, estruturas BEGIN…END e condições aninhadas a partir de um prompt em linguagem natural. Sempre revise as condições booleanas e a lógica de ramificação geradas antes de executar o script no seu banco de dados.

Assistentes de IA e aprendizado de máquina traduzem regras em linguagem natural para lógica IF…ELSE ou CASE, sugerem ramificações ausentes e sinalizam condições que nunca podem ser verdadeiras. O desenvolvedor revisa cada sugestão para verificar sua correção antes de implementá-la.

Resuma esta postagem com: