SQL Academy · Aula

CASE pesquisado versus simples

Duas maneiras de escrever CASE.

Aula 2 de 413 etapas

CASE pesquisado versus simples é uma aula grátis de SQL Academy no CoddyKit. Esta é a aula 2 de 4. Você pode ler a aula completa abaixo gratuitamente — depois pratica ao vivo no navegador com um editor de código integrado e um tutor de IA 24/7. Faz parte do caminho de aprendizado de SQL Academy, e seu progresso é sincronizado entre a web e o app CoddyKit. O curso de SQL Academy inclui 4 aulas no total.

Duas maneiras de escrever CASE

O SQL oferece duas formas de expressão CASE: o CASE simples e o CASE pesquisado. Ambos retornam um valor com base em condições, mas diferem na maneira como essas condições são escritas.

Ao final desta lição, você saberá quando escolher cada forma e como evitar erros comuns ao confundi-las.

CASE simples — a ideia

Um CASE simples compara uma expressão com uma lista de valores. Pense nele como uma tabela de consulta: você escolhe uma coluna ou um valor à esquerda e, em seguida, lista a que esse valor é igual em cada ramo WHEN.

Sintaxe: CASE expression WHEN value1 THEN result1 WHEN value2 THEN result2 ELSE default END

SELECT
  product_name,
  category_id,
  CASE category_id
    WHEN 1 THEN 'Electronics'
    WHEN 2 THEN 'Clothing'
    WHEN 3 THEN 'Books'
    ELSE 'Other'
  END AS category_name
FROM products;

CASE simples na prática

A expressão CASE fica logo após a palavra-chave, e a coluna status é comparada com cada valor de WHEN usando igualdade. Observe que você não escreve status = nos ramos WHEN — a comparação está implícita.

SELECT
  order_id,
  status,
  CASE status
    WHEN 'pending'   THEN 'Awaiting payment'
    WHEN 'paid'      THEN 'Payment received'
    WHEN 'shipped'   THEN 'On its way'
    WHEN 'delivered' THEN 'Completed'
    ELSE 'Unknown status'
  END AS status_label
FROM orders;

CASE pesquisado — a ideia

Um CASE pesquisado não tem uma expressão logo após a palavra-chave CASE. Em vez disso, cada ramo WHEN contém uma condição booleana completa. Isso o torna muito mais flexível: você pode combinar colunas diferentes, fazer verificações de intervalo ou chamar funções dentro de cada WHEN.

Sintaxe: CASE WHEN condition1 THEN result1 WHEN condition2 THEN result2 ELSE default END

SELECT
  employee_name,
  salary,
  CASE
    WHEN salary < 30000  THEN 'Entry Level'
    WHEN salary < 60000  THEN 'Mid Level'
    WHEN salary < 100000 THEN 'Senior'
    ELSE 'Executive'
  END AS salary_band
FROM employees;

CASE pesquisado na prática

Como cada WHEN aceita qualquer expressão booleana, você pode combinar várias colunas em um único ramo. O banco de dados avalia as cláusulas WHEN de cima para baixo e retorna o resultado do primeiro ramo que é TRUE.

SELECT
  product_name,
  stock,
  price,
  CASE
    WHEN stock = 0              THEN 'Out of stock'
    WHEN stock < 10 AND price > 100 THEN 'Low stock — premium item'
    WHEN stock < 10             THEN 'Low stock'
    ELSE 'In stock'
  END AS availability
FROM products;

Principal diferença estrutural

A tabela abaixo apresenta a distinção fundamental:

CASE simples — uma expressão após CASE; cada WHEN verifica a igualdade com essa expressão.
CASE pesquisado — nenhuma expressão após CASE; cada WHEN é uma condição booleana independente.

Como o CASE simples faz apenas verificações de igualdade, ele não consegue lidar com intervalos, NULL ou condições que envolvam várias colunas. Para qualquer situação além de uma correspondência direta de valor, use o CASE pesquisado.

-- Simple CASE: equality only
SELECT CASE day_number
         WHEN 1 THEN 'Monday'
         WHEN 2 THEN 'Tuesday'
         ELSE 'Other'
       END AS day_name
FROM schedule;

-- Searched CASE: any condition
SELECT CASE
         WHEN day_number BETWEEN 1 AND 5 THEN 'Weekday'
         WHEN day_number IN (6, 7)        THEN 'Weekend'
       END AS day_type
FROM schedule;

Tratamento de NULL — por que o CASE pesquisado é melhor

Um CASE simples usa = internamente, e NULL = NULL nunca é TRUE no SQL. Portanto, um CASE simples não consegue corresponder a uma coluna NULL. Um CASE pesquisado permite escrever WHEN column IS NULL THEN ..., o que funciona corretamente.

-- Simple CASE: NULL branch never matches
SELECT CASE manager_id
         WHEN NULL THEN 'No manager'   -- this will NEVER fire
         ELSE 'Has manager'
       END
FROM employees;

-- Searched CASE: correct NULL check
SELECT CASE
         WHEN manager_id IS NULL THEN 'No manager'
         ELSE 'Has manager'
       END AS manager_status
FROM employees;

Combinando colunas em um CASE pesquisado

Uma grande vantagem do CASE pesquisado é que cada ramo WHEN pode referenciar colunas completamente diferentes ou chamar funções. Isso permite expressar regras de negócio complexas que o CASE simples não consegue tratar de forma alguma.

SELECT
  customer_name,
  total_orders,
  total_spent,
  CASE
    WHEN total_spent > 10000 AND total_orders > 20 THEN 'VIP'
    WHEN total_spent > 5000                        THEN 'Gold'
    WHEN total_orders > 10                         THEN 'Silver'
    ELSE 'Standard'
  END AS tier
FROM customers;

Usando CASE em ORDER BY

As duas formas de CASE podem aparecer dentro de ORDER BY para criar uma ordem de ordenação personalizada que não existe nos dados. Aqui, um CASE simples mapeia nomes de prioridade para números, para que as linhas sejam ordenadas pela prioridade de negócio, e não em ordem alfabética.

SELECT ticket_id, subject, priority
FROM support_tickets
ORDER BY
  CASE priority
    WHEN 'critical' THEN 1
    WHEN 'high'     THEN 2
    WHEN 'medium'   THEN 3
    WHEN 'low'      THEN 4
    ELSE 5
  END ASC;

CASE dentro de funções de agregação

Envolver um CASE pesquisado em SUM ou COUNT é um padrão clássico de agregação condicional — às vezes chamado de tabela dinâmica. Isso permite produzir vários totais de categorias em uma única varredura, em vez de executar várias consultas.

SELECT
  department,
  COUNT(*) AS total_employees,
  SUM(CASE WHEN gender = 'F' THEN 1 ELSE 0 END) AS female_count,
  SUM(CASE WHEN gender = 'M' THEN 1 ELSE 0 END) AS male_count,
  SUM(CASE WHEN salary > 70000 THEN salary ELSE 0 END) AS high_earner_payroll
FROM employees
GROUP BY department;

Escolhendo a forma certa

Uma regra prática:

Use o CASE simples quando estiver mapeando uma única coluna para um conjunto fixo de valores conhecidos — ele é mais curto e fácil de ler.
Use o CASE pesquisado para todo o resto: intervalos, verificações de NULL, lógica com várias colunas ou chamadas de funções dentro das condições.

Quando estiver em dúvida, o CASE pesquisado sempre funciona. Você pode até reescrever qualquer CASE simples como um CASE pesquisado — mas não o contrário.

-- These two queries return identical results

-- Simple CASE (concise for equality)
SELECT CASE region_code
         WHEN 'US' THEN 'United States'
         WHEN 'UK' THEN 'United Kingdom'
         ELSE 'International'
       END AS region_name
FROM sales;

-- Equivalent Searched CASE
SELECT CASE
         WHEN region_code = 'US' THEN 'United States'
         WHEN region_code = 'UK' THEN 'United Kingdom'
         ELSE 'International'
       END AS region_name
FROM sales;

Verificação rápida

Teste sua compreensão sobre CASE simples e CASE pesquisado.

Recapitulação da lição

Veja o que você aprendeu nesta lição:

CASE simples — coloque uma expressão após CASE; cada WHEN verifica se essa expressão é igual a um valor específico. Ideal para mapear uma única coluna para uma lista fixa de rótulos.

CASE pesquisado — nenhuma expressão após CASE; cada WHEN contém uma condição booleana completa. Aceita intervalos, verificações de NULL, lógica com várias colunas e chamadas de funções.

Ambas as formas avaliam os ramos de cima para baixo e retornam o resultado do primeiro ramo TRUE. Quando nenhum ramo corresponde e não há ELSE, o resultado é NULL. Para obter a máxima flexibilidade, o CASE pesquisado é sempre a opção segura — ele faz tudo o que o CASE simples faz e muito mais.

Grátis para começar

Aprenda SQL com um tutor de IA — grátis

Escreva e execute código real no seu navegador, obtenha ajuda instantânea de um tutor de IA 24/7 e continue de onde parou na web ou no app.

Cursos
46
Aulas
183

Perguntas Frequentes

A aula “CASE pesquisado versus simples” é grátis?

Sim — o texto completo de “CASE pesquisado versus simples” é grátis para ler aqui na web. Para praticá-la interativamente (um editor de código integrado e um tutor de IA 24/7) e desbloquear o restante do curso de SQL Academy, atualize para CoddyKit PRO. O curso de SQL Academy inclui 4 aulas no total.

O que vou aprender em “CASE pesquisado versus simples”?

Duas maneiras de escrever CASE. Você pratica SQL Academy com código prático que executa diretamente no navegador, e um tutor de IA 24/7 responde suas dúvidas enquanto trabalha na aula.

Preciso ter experiência prévia para começar SQL Academy?

Nenhuma experiência prévia é necessária. SQL Academy no CoddyKit é estruturado para alunos iniciantes até avançados, então você pode começar aqui ou desde o início e aprender no seu ritmo. Esta é a aula 2 de 4.

Quanto tempo leva a aula “CASE pesquisado versus simples”?

A maioria das aulas CoddyKit leva cerca de 5–10 minutos. Cada uma é compacta e interativa, então você faz progresso constante e retoma exatamente de onde parou entre web e app.

Posso escrever e executar código nesta aula de SQL Academy?

Sim. Cada aula de SQL Academy inclui um editor de código integrado, então você escreve e executa código real direto no navegador e recebe feedback de IA instantaneamente — nenhuma configuração local necessária.

Todas as aulas deste curso

  1. A expressão CASE
  2. CASE pesquisado versus simples
  3. Agrupando e rotulando dados
  4. CASE em ORDER BY e agregações
← Voltar para SQL Academy