Instrução SQL CASE: Lógica Condicional em Suas Consultas

Published: 2026-02-11

A instrução CASE é a forma do SQL de adicionar lógica condicional às suas consultas. Ela funciona como uma estrutura if-then-else, permitindo retornar valores diferentes com base em condições. CASE é suportada em todos os principais bancos de dados SQL, incluindo SQLite, PostgreSQL, MySQL, SQL Server e Oracle.

Dados de Exemplo

Usamos duas tabelas em todos os exemplos:

Tabela products:

id name category price stock rating
1 Laptop Pro Electronics 1299.99 15 4.5
2 Wireless Mouse Electronics 29.99 50 4.2
3 Office Chair Furniture 249.99 8 4.7
4 Desk Lamp Furniture 39.99 25 3.9
5 Notebook Pack Stationery 12.99 100 4.0
6 Pen Set Stationery 8.99 75 3.5
7 Monitor 27" Electronics 399.99 0 4.6
8 Standing Desk Furniture 599.99 3 4.8

Tabela orders:

id product_id quantity order_date status
1 1 2 2026-02-01 delivered
2 2 5 2026-02-03 shipped
3 3 1 2026-02-05 processing
4 4 3 2026-02-06 delivered
5 5 10 2026-02-07 shipped
6 1 1 2026-02-08 cancelled
7 7 1 2026-02-09 pending
8 8 1 2026-02-10 processing

Expressão CASE Simples

A expressão CASE simples compara uma coluna ou expressão com valores específicos. Ela é concisa quando você está verificando igualdade.

Sintaxe

CASE column_name
  WHEN value1 THEN result1
  WHEN value2 THEN result2
  ELSE default_result
END

Exemplo: Categorizar o Status do Pedido

Traduza códigos de status de pedido em rótulos amigáveis para o usuário:

Expressão CASE Pesquisada

A expressão CASE pesquisada avalia condições booleanas, permitindo comparações complexas e faixas de valores.

Sintaxe

CASE
  WHEN condition1 THEN result1
  WHEN condition2 THEN result2
  ELSE default_result
END

Exemplo: Categorias de Preço

Classifique produtos por faixa de preço:

Exemplo: Status de Disponibilidade de Estoque

Determine o status de inventário com diferentes limites:

Usando CASE em Cálculos

Instruções CASE podem modificar cálculos, aplicar fórmulas condicionais ou tratar valores NULL.

Exemplo: Aplicar Descontos por Categoria

Calcule descontos com base na categoria do produto:

Exemplo: Prioridade de Pedidos por Valor e Status

Calcule a prioridade do pedido com base em múltiplos fatores:

CASE em Agregações

Use CASE dentro de funções de agregação para criar relatórios do tipo pivot ou contagens condicionais.

Exemplo: Contar Produtos por Disponibilidade

Conte quantos produtos estão em cada categoria de estoque:

Exemplo: Receita por Categoria e Status

Calcule diferentes métricas usando agregação condicional:

CASE em ORDER BY

Use CASE em ORDER BY para criar lógica de ordenação personalizada.

Exemplo: Ordem de Classificação Personalizada

Ordene produtos com prioridade personalizada (sem estoque primeiro, depois por avaliação):

Instruções CASE Aninhadas

Expressões CASE podem ser aninhadas para lógica mais complexa.

Exemplo: Classificação Complexa de Produtos

Combine múltiplos critérios para uma categorização detalhada:

Casos de Uso Comuns para Instruções CASE

  • Categorização de dados — Agrupar valores em faixas ou categorias
  • Formatação condicional — Exibir rótulos ou indicadores de status amigáveis
  • Cálculos dinâmicos — Aplicar fórmulas diferentes com base em condições
  • Criação de tabelas dinâmicas (pivot) — Combinar com agregações para relatórios em formato de tabela cruzada
  • Ordenação personalizada — Definir ordens de classificação específicas para regras de negócio especiais
  • Tratamento de valores NULL — Substituir ou sinalizar dados ausentes
  • Decisões com múltiplos critérios — Implementar regras de negócio complexas em SQL

CASE vs. IIF e COALESCE

  • CASE — Mais flexível, lida com múltiplas condições
  • IIF(condition, true_value, false_value) — Sintaxe mais simples para uma única condição (SQL Server, Access)
  • COALESCE(val1, val2, …) — Retorna o primeiro valor não NULL (bom para tratamento de NULL)

SQLite oferece suporte a CASE e COALESCE, mas não a IIF. Use CASE para máxima compatibilidade.

Dicas de Desempenho

  1. Ordene as condições com cuidado — Coloque primeiro as condições mais prováveis
  2. Evite avaliações redundantes — CASE é avaliado sequencialmente; quando uma condição corresponde, ele para
  3. Indexe as colunas apropriadas — Se CASE usa comparações de colunas, índices podem ajudar
  4. Considere colunas calculadas — Para lógica CASE usada com frequência, alguns bancos de dados suportam colunas calculadas indexadas

Resumo

  • CASE adiciona lógica condicional às consultas SQL com comportamento if-then-else
  • CASE simples compara uma coluna com valores específicos: CASE column WHEN value THEN result
  • CASE pesquisado avalia condições booleanas: CASE WHEN condition THEN result
  • Pode ser usado em SELECT, WHERE, ORDER BY e funções de agregação
  • Expressões CASE podem ser aninhadas para árvores de decisão complexas
  • Sempre inclua uma cláusula ELSE para tratar valores inesperados
  • Suportado em todos os principais bancos de dados SQL com sintaxe consistente

Tente modificar os exemplos para experimentar diferentes condições e ver como CASE pode simplificar sua lógica condicional!