Muitos, habituados a outras linguagens de programação, perguntam-se como reproduzir a instrução clássica IF ELSE IF em SQL. A resposta é que o SQL não tem um comando direto com esse nome, mas oferece uma solução ainda mais poderosa e elegante: a expressão CASOS QUANDO. Esta é a solução padrão e universal para gerir condições múltiplas diretamente nas suas consultas. Juntamente com CASOS, alguns dialetos, como o T-SQL e o MySQL, oferecem-lhe também atalhos mais concisos, como IIF() e IF() para os casos mais simples.

Imagine ter de segmentar os clientes por faixas de despesas, atribuir diferentes prioridades aos pedidos de suporte consoante a urgência ou classificar os produtos de acordo com a sazonalidade. Gostaria de fazer tudo isto diretamente na base de dados, sem ter de exportar os dados e processá-los noutro local, não é verdade?
É precisamente este o poder da lógica condicional no SQL. É essa linha de código que transforma uma simples extração de dados numa verdadeira análise de negócios.
Dominar a lógica «if else if» em SQL é uma competência que faz a diferença entre quem apenas consulta os dados e quem os faz falar. Neste guia, vamos mostrar-lhe como transformar as suas consultas de simples listas de registos em ferramentas de análise dinâmica.
Em vez de extrair dados brutos para depois os transferir para o Excel ou o Python, vais aprender a:
A lógica condicional permite-lhe integrar a inteligência empresarial diretamente na consulta. Em vez de calcular as métricas posteriormente, cria-as à medida que extrai os dados. Isto torna as suas análises mais rápidas, repetíveis e integradas no fluxo de tomada de decisões.
No final deste guia, será capaz de transformar dados em decisões, tirando o máximo partido das capacidades da sua base de dados. Plataformas como a ELECTE, uma plataforma de análise de dados baseada em IA para PME, utilizam precisamente estes princípios para automatizar a criação de relatórios, transformando consultas complexas em visualizações imediatas que orientam as decisões empresariais.
Se a sua lógica vai além de um simples «se acontecer isto, então faz aquilo», a expressão CASE torna-se a sua ferramenta mais poderosa e fiável em SQL. Não se trata de um recurso específico de um dialeto, mas sim do padrão ANSI-SQL para lidar com condições múltiplas. Isto significa que o seu código funcionará em praticamente qualquer lugar, desde o PostgreSQL até ao SQL Server.
Pense em CASOS como uma árvore de decisão inserida diretamente na tua consulta. Em vez de encadear complexas SE encaixados uns nos outros, criando um código que rapidamente se torna ilegível e um pesadelo de manter, CASOS permite-lhe enumerar uma série de condições de forma clara e sequencial.
A expressão CASOS está disponível em duas versões, cada uma concebida para cenários específicos.
QUANDO é uma expressão booleana independente. Podes utilizar várias colunas, operadores lógicos como E e OR, e comparações complexas (>, <, <>). Esta é a verdadeira personificação da lógica if-else if em SQL.Na prática, é o Pesquisado CASE que vais usar em 90% das vezes. É a ferramenta que te permite traduzir regras de negócio complexas – como segmentar os clientes com base no valor das compras e de acordo com a frequência de compra – diretamente na tua pesquisa.
Vamos ver como usar o Pesquisado CASE para uma tarefa clássica: classificar os produtos com base no preço. Notarás que a sintaxe é praticamente idêntica nos principais dialetos, o que comprova a sua incrível portabilidade.
Exemplo em MySQL/PostgreSQL/SQL Server:
SELECTnome_prodotto,prezzo,CASEWHEN prezzo > 1000 THEN 'Premium'WHEN prezzo > 100 AND prezzo <= 1000 THEN 'Fascia Media'ELSE 'Economico'END AS categoria_prezzoFROM Prodotti;
O que faz este código? Analisa cada linha da tabela Produtos. Se o preço é superior a 1000, atribui a etiqueta «Premium». Caso contrário, passa à condição seguinte: verifica se está compreendido entre 100 e 1000 para atribuir «Gama Média». Se nenhuma das duas condições for verdadeira, a cláusula ELSE entra em ação como uma rede de segurança, atribuindo a classificação «Económico».
A adoção de CASOS cresceu significativamente no setor de TI italiano. Uma análise de mercado revelou um aumento de 45% na utilização de consultas complexas que aproveitam CASOS por parte das PME entre 2020 e 2025. Um relatório da ASSINT de 2023 revelou ainda que o 68% dos programadores italianos prefere CASOS porque reduz os erros do 32% em comparação com abordagens alternativas mais complexas. Também na ELECTE, a nossa plataforma de análise de dados baseada em IA, estes conceitos são fundamentais para automatizar os relatórios, reduzindo o tempo de processamento em 60% para os nossos clientes.
Mas aprender a usar CASOS não se limita a SELECT. Podes incluí-lo em cláusulas como ONDE, ORDENAR POR e até mesmo GROUP BY para criar filtros, ordenações e agregações dinâmicas, tornando as suas consultas ainda mais inteligentes e flexíveis. Se quiser aprofundar ainda mais, recomendo que explore a nossa guia detalhado sobre CASE WHEN em SQL.
Para o ajudar a escrever código que funcione sem problemas em diferentes bases de dados, preparámos uma tabela que resume as pequenas, mas cruciais, diferenças sintáticas entre os dialetos SQL mais comuns.
CaracterísticaMySQLSQL ServerPostgreSQLPesquisado CASE (CASE WHEN ... END)SuportadoSuportadoSuportadoSimple CASE (CASE com WHEN ... END)SuportadoSuportadoSuportadoFunção binária alternativaIF(condição, verdadeiro, falso)IIF(condição, verdadeiro, falso)Indisponível, utilize CASOSGestão de tipos nos ramos THEN/ELSEPermissiva, coerção automática; Restritiva, tipos iguais ou implicitamente convertíveis; Restritiva, tipos compatíveis obrigatórios; Cláusula ELSE omessaRetorna NULLRetorna NULLRetorna NULL
As três bases de dados — MySQL, SQL Server (T-SQL) e PostgreSQL — suportam tanto o CASE pesquisado (Searched CASE) como o CASE simples (Simple CASE) com a mesma sintaxe padrão: CASE WHEN ... END.
No que diz respeito às funções alternativas, o MySQL oferece IF(condição, verdadeiro, falso) e o SQL Server dispõe de IIF(cond, verdadeiro, falso). O PostgreSQL não possui uma função direta equivalente a IIF e requer o uso do CASOS em qualquer situação.
No que diz respeito à gestão de tipos, o MySQL é o mais permissivo dos três. O SQL Server é mais restritivo: todos os resultados nas ramificações THEN e ELSE devem ser do mesmo tipo de dados ou implicitamente convertíveis. O PostgreSQL também é restritivo e exige que os tipos de dados sejam compatíveis entre todas as ramificações do CASOS.
Como podes ver, a sintaxe básica é sólida e padronizada. As diferenças surgem principalmente nas funções alternativas e no tratamento dos tipos de dados, um detalhe que não deve ser subestimado quando escreves consultas destinadas a ser executadas em sistemas heterogéneos. Ter estas nuances em mente poupar-te-á muitas dores de cabeça.
Claro, a expressão CASOS É o canivete suíço para lidar com lógicas complexas, mas o que acontece quando a decisão é simples, uma escolha direta entre duas opções? Para estes cenários «if-else» puros, alguns dialetos SQL oferecem alternativas mais diretas e simples.
Pensa nelas como atalhos. Em vez de construir um quarteirão inteiro CASOS Para gerir apenas dois resultados, podes usar uma única função, o que torna o código mais compacto e, convenhamos, mais fácil de ler à primeira vista.
MySQL coloca a função em cima da mesa IF(), que faz exatamente o que promete: aceita três argumentos e não pede mais nada.
A sintaxe é extremamente simples: IF(condição, valor_se_verdadeiro, valor_se_falso).
Vamos dar um exemplo prático. Queres classificar rapidamente os utilizadores da tua plataforma como «Ativos» ou «Inativos» com base na data do seu último acesso. Com SE, e pronto:
SELECT nome_do_utilizador, IF(último_login > '2023-01-01', 'Ativo', 'Inativo') AS estado_do_utilizador FROM Utilizadores;
Não há dúvida de que é mais conciso do que um CASOS equivalente. Aliás, os dados do setor são claros: a utilização de IF(condição, verdadeiro, falso) aumentou em 52% entre as médias empresas italianas desde 2019.
Se quiser aprofundar o assunto, pode encontrar mais detalhes sobre as expressões condicionais SQL.
SQL Server não fica de braços cruzados e oferece uma função praticamente idêntica: IIF() (significa IF imediato). O funcionamento é o mesmo que IF() No MySQL, a mesma lógica, a mesma sintaxe.
Assim, retomando o exemplo anterior, para o SQL Server escreveremos:
SELECT nome_do_utilizador, IIF(último_login > '2023-01-01', 'Ativo', 'Inativo') AS estado_do_utilizador FROM Utilizadores;
Esta infografia ajuda-o a visualizar o processo de tomada de decisão para escolher entre Simple CASE e Pesquisado CASE dependendo do tipo de comparação que precisa de fazer.

O conceito fundamental é simples: se estiveres a verificar se um único valor é igual a outro, Simple CASE é mais claro. Por qualquer outra lógica, Pesquisado CASE é a escolha certa.
Quando utilizar IF/IIF? Utiliza-as sem hesitar para condições binárias, claras e simples. Mas atenção: assim que a tua lógica começar a exigir um «elseif», volta imediatamente ao CASOS. É sempre a melhor opção para manter o código legível e fácil de manter ao longo do tempo.
Conhecer estas alternativas específicas para cada dialeto permite-lhe escrever código que não só está correto, mas também otimizado para a plataforma que está a utilizar. É o equilíbrio perfeito entre potência e simplicidade.

O verdadeiro potencial das expressões condicionais em SQL revela-se quando as aplicamos a problemas concretos de negócio. É aqui que a teoria se transforma em ação. Vamos ver como SE, ELSE e, acima de tudo CASOS QUANDO deixam de ser meros comandos para se tornarem ferramentas capazes de transformar dados brutos em insights estratégicos, diretamente dentro da base de dados.
Analisaremos quatro cenários com os quais qualquer analista de dados ou programador se depara, mais cedo ou mais tarde, desde o marketing até à gestão de dados, mostrando como uma CASOS QUANDO bem estruturada pode automatizar tarefas complexas e fornecer respostas imediatas.
Imagina que queiras segmentar os teus clientes para lançar campanhas de marketing mais eficazes. A abordagem tradicional? Exportar tudo para uma folha de cálculo e começar a mexer em fórmulas e filtros. Mas há uma forma muito mais inteligente: criar segmentos dinâmicos diretamente na tua consulta SELECT.
Esta técnica permite-lhe classificar cada cliente com base no seu comportamento de compra, como o valor total das compras ou a data da última encomenda. É uma forma extremamente eficaz de identificar rapidamente os melhores clientes, os mais fiéis e aqueles que, pelo contrário, correm o risco de deixar de ser seus clientes.
Exemplo prático:
SELECTID_Cliente,Nome,Spesa_Totale,Ultimo_Acquisto,CASEWHEN Spesa_Totale > 5000 AND Ultimo_Acquisto >= '2023-10-01' THEN 'Cliente Premium'WHEN Spesa_Totale > 1000 THEN 'Cliente Fedele'WHEN Ultimo_Acquisto < '2023-01-01' THEN 'Cliente a Rischio'ELSE 'Cliente Occasionale'END AS Segmento_ClienteFROM Clienti;
Com uma única consulta, os seus dados ganham um contexto essencial para as suas estratégias de marketing e retenção de clientes. É um dos pilares para construir um exemplo de base de dados relacional que seja verdadeiramente útil para o negócio e não apenas um arquivo de dados.
A qualidade dos dados é fundamental. Sem dados limpos, qualquer análise pode estar errada. Infelizmente, os dados introduzidos manualmente são frequentemente um desastre: incoerentes, cheios de erros de digitação ou com formatações diferentes. Utilizar a lógica condicional numa cláusula ATUALIZAÇÃO permite-lhe limpar e uniformizar conjuntos de dados inteiros com um único comando.
Esta abordagem não é apenas mais eficiente do que a correção manual de milhares de registos: é verdadeiramente essencial. Garante a coerência e prepara os seus dados para análises finalmente fiáveis.
Exemplo prático:
UPDATE EndereçosSETEstado = CASEWHEN Estado IN ('NY', 'New York', 'new-york') THEN 'New York'WHEN Estado IN ('CA', 'California', 'cali') THEN 'California'ELSE Estado -- Mantém inalterados os outros estadosENDWHEREPaís = 'EUA';
O cálculo das remunerações variáveis é muitas vezes um quebra-cabeças. Depende de inúmeros fatores: desempenho nas vendas, antiguidade na empresa, cumprimento de objetivos de equipa. Em vez de gerir estas regras complexas com scripts externos ou, pior ainda, no Excel, pode incorporá-las numa procedimento armazenado SQL.
Isto não só centraliza a lógica de negócio, como também garante que os cálculos sejam executados de forma coerente e segura, reduzindo o risco de erros manuais e assegurando a transparência.
Uma procedimento armazenado pode receber como entrada o ID de um funcionário e devolver o bónus exato, aplicando uma lógica if else if um processo complexo baseado nos dados de desempenho que já se encontram na base de dados.
Exemplo de lógica (em T-SQL):
CREATE PROCEDURE CalculeBônusFuncionário@ID_Funcionário INT AS BEGIN DECLARE @AnosDeServiço INT; DECLARE @VendasAnuais DECIMAL(10, 2); DECLARE @Bônus DECIMAL(10, 2);SELECT @AnosDeServiço = Anos_Serviço, @VendasAnuais = Vendas_2023FROM DesempenhoDeFuncionários WHERE ID_Funcionário = @ID_Funcionário;IF @VendasAnuais > 100000SET @Bónus = @VendasAnuais * 0.10; -- Bónus de 10% para os melhores desempenhos ELSE IF @VendasAnuais > 50000 AND @AnosDeServiço > 5 SET @Bónus = @VendasAnuais * 0.07; -- 7% para seniores com boas vendas ELSE SET @Bónus = @VendasAnuais * 0.05; -- Bónus padrão de 5%-- Lógica para atualizar a tabela ou devolver o valorSELECT @Bónus AS Bónus_Calculado;END;
Por fim, a lógica condicional pode tornar os seus relatórios incrivelmente dinâmicos. Ao utilizar CASOS no âmbito de funções de agregação como CONTA ou SUM, pode criar métricas complexas com uma única análise da tabela.
Por exemplo, pode contabilizar encomendas de diferentes categorias, somar as vendas por região e calcular o total de encomendas pendentes, tudo numa única consulta. Isto evita a necessidade de executar consultas separadas para cada métrica, tornando os scripts de relatórios muito mais rápidos e fáceis de manter.
Exemplo prático:
SELECT COUNT(CASE WHEN Estado = 'Enviado' THEN 1 END) AS Encomendas_Enviadas, COUNT(CASE WHEN Estado = 'Em espera' THEN 1 END) AS Encomendas_Em_Aguardar,SUM(CASE WHEN Região = 'Norte' THEN Total END) AS Vendas_Norte,SUM(CASE WHEN Região = 'Sul' THEN Total END) AS Vendas_SulFROM Encomendas;

Ter uma lógica condicional que funcione é apenas metade do trabalho. Para ser verdadeiramente eficaz, ela também tem de ser robusta e, acima de tudo, rápida. Dois dos obstáculos mais comuns que podem comprometer as suas análises são o tratamento dos valores NULL e as consultas que demoram uma eternidade a ser executadas.
Os valores NULL são um caso à parte no SQL. Qualquer comparação direta com NULL (como coluna = NULL ou colonna <> NULL) não devolve nem verdadeiro nem falso, mas um terceiro estado: DESCONHECIDO. Este comportamento aparentemente inofensivo pode criar verdadeiros buracos negros na tua lógica if else if em SQL, excluindo linhas que pensavas ter incluído e distorcendo os teus resultados.
Para não cair nesta armadilha, só há uma solução: gerir os valores NULL de forma explícita e preventiva. Em vez de cruzar os dedos e esperar que os dados estejam limpos, pode utilizar funções específicas diretamente nas suas expressões CASOS ou SE.
As duas armas mais eficazes do teu arsenal são COALESCE e ISNULL.
COALESCE(coluna, valor_padrão): Esta é a função padrão ANSI-SQL, o que significa que a encontrará praticamente em qualquer lugar. Devolve o primeiro valor diferente de NULL que encontrar na lista de argumentos. É perfeita para substituir rapidamente um NULL com uma alternativa segura, como um zero ou a stringa «N/D», antes mesmo de a sua lógica condicional entrar em ação.ISNULL(coluna, valor_padrão): Típico de dialetos como SQL Server, faz essencialmente o mesmo que COALESCE quando se utilizam apenas dois argumentos. Mas atenção, pois existem diferenças pequenas, mas importantes, na forma como lida com os tipos de dados.Ao integrar estas funções, a sua lógica torna-se à prova de NULL. Simples e eficaz.
Escolher a função certa para lidar com valores NULL pode fazer toda a diferença em termos de portabilidade do código e desempenho.
Um guia rápido para escolher entre COALESCE, ISNULL e NULLIF, consoante o dialeto SQL e o caso de utilização específico, com exemplos práticos.
COALESCE retorna o primeiro valor não nulo de uma lista de argumentos. É a função mais flexível e versátil, suportada por todos os principais dialetos: SQL Server, PostgreSQL, Oracle, MySQL e SQLite. Um exemplo típico de utilização é retornar o primeiro endereço de e-mail disponível entre o profissional, o pessoal e um valor de fallback: SELECT COALESCE(email_trabalho, email_pessoal, 'Sem e-mail') FROM utilizadores.
ISNULL substitui um valor NULL por uma alternativa especificada. É menos flexível do que a função COALESCE, uma vez que aceita apenas dois argumentos e está disponível exclusivamente no SQL Server e no T-SQL. Um exemplo prático é devolver o preço de tabela quando o preço com desconto não existe: SELECT ISNULL(preço_com_desconto, preço_de_tabela) FROM produtos.
NULLIF retorna NULL se duas expressões forem iguais; caso contrário, retorna a primeira. É particularmente útil para evitar divisões por zero e é suportada pelo SQL Server, PostgreSQL, Oracle e MySQL. Um exemplo ilustrativo é o cálculo da média por pedido, evitando divisões por zero: SELECT vendas_totais / NULLIF(número_de_encomendas, 0) AS média_por_encomenda FROM relatório.
Em resumo, COALESCE é quase sempre a opção mais segura e prática. Usa ISNULL se trabalha exclusivamente com o SQL Server e prefere a sua sintaxe, e tem em conta NULLIF à mão para casos específicos, como a prevenção de erros matemáticos.
Uma lógica condicional, especialmente se inserida numa cláusula ONDE, pode tornar-se um verdadeiro travão para as suas consultas. Por vezes, de facto, impede a base de dados de utilizar os índices de que dispõe, obrigando-a a realizar uma varredura completa da tabela e a tornar tudo mais lento.
Uma consulta só está «concluída» quando é rápida. Otimizar as condições CASOS não é uma operação opcional, mas sim uma parte essencial para escrever código SQL de nível profissional que não sobrecarregue o sistema.
Aqui ficam algumas dicas práticas para garantir que as suas consultas não só estejam corretas, mas também sejam rápidas:
QUANDO por probabilidade: Coloque sempre em primeiro lugar as condições que ocorrem com mais frequência. O motor da base de dados pára na primeira condição verdadeira que encontrar. Este pequeno truque pode reduzir drasticamente o trabalho que tem de realizar, especialmente em tabelas muito grandes.QUANDO. Cada linha deve ser avaliada e, quanto mais complexa for a condição, mais tempo demora. A simplicidade compensa sempre em termos de desempenho.ONDE: Esta é uma regra de ouro. Aplicar uma função a uma coluna indexada na cláusula ONDE (por exemplo, WHERE YEAR(data_pedido) = 2023) é uma das formas mais comuns de «destruir» um índice. É muito melhor manter as colunas «limpas» e aplicar as transformações no lado direito da comparação, se possível (WHERE data_ordine >= '2023-01-01' AND data_ordine < '2024-01-01').A teoria é fundamental, mas é na prática que se ganha o jogo. Para transformar os conceitos em competências reais, eis as dicas que te vão ajudar a escrever código condicional não só correto, mas também eficiente, legível e preparado para o futuro.
CASOS para a portabilidade. Por ser o padrão ANSI-SQL, é a língua franca das bases de dados. Se a sua lógica tiver mais de dois resultados possíveis, CASOS Não é uma opção: é a escolha que torna o seu código robusto e independente da plataforma. É um investimento no futuro.SE/IIF apenas pela simplicidade (e se puderes). Estas funções são fantásticas pela sua sintaxe compacta nas condições binárias (verdadeiro/falso). Mas assim que a lógica se complicar e precisares de um «caso contrário...», abandona-as imediatamente e volta à clareza e escalabilidade de CASOS.NULL. Um valor NULL O uso de `unmanaged` pode distorcer os teus resultados. Inclui sempre uma gestão explícita com COALESCE ou com controlos É NULO. É como colocar o cinto de segurança: talvez nem sempre seja necessário, mas quando é preciso, salva-te.ELSE. Omitir a cláusula ELSE num CASOS é como deixar a porta aberta a resultados inesperados (irá trazer NULL). Adicione um ELSE torna o comportamento da sua consulta previsível e protege-o de surpresas desagradáveis.CASOS. O motor SQL pára na primeira condição que for verdadeira. Em tabelas com milhões de linhas, este pequeno truque pode acelerar significativamente as suas consultas.Ao aplicar estes princípios de forma consistente, não se limitará a escrever consultas. Estará a conceber uma solução sólida de business intelligence, capaz de resistir ao teste do tempo e a dados imperfeitos.
Já reparaste que, apesar de não existir um comando IF ELSE IF direto, o SQL oferece ferramentas ainda mais poderosas e flexíveis. A expressão CASOS QUANDO é o seu principal recurso, um padrão universal que lhe permite implementar lógicas de negócio complexas diretamente nas consultas. Para os casos mais simples, funções como SE e IIF oferecem uma sintaxe mais simples.
Dominar estas técnicas significa transformar os dados de simples registos em insights estratégicos, criando segmentações de clientes, limpando os dados e elaborando relatórios dinâmicos de forma eficiente e escalável.
Agora está pronto para dar o próximo passo. Não se limite a analisar os seus dados, mas faça com que eles falem por si. Comece hoje mesmo a aplicar estas lógicas condicionais para obter respostas mais inteligentes e orientar melhores decisões empresariais.
Pronto para transformar os seus dados numa vantagem competitiva sem escrever uma única linha de código? Descubra como ELECTE dar sentido aos seus dados com uma demonstração gratuita.