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
- Ordene as condições com cuidado — Coloque primeiro as condições mais prováveis
- Evite avaliações redundantes — CASE é avaliado sequencialmente; quando uma condição corresponde, ele para
- Indexe as colunas apropriadas — Se CASE usa comparações de colunas, índices podem ajudar
- Considere colunas calculadas — Para lógica CASE usada com frequência, alguns bancos de dados suportam colunas calculadas indexadas
Resumo
CASEadiciona 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!