← Curso IA na prática para Analistas de Dados: do pedido vago ao número que se sustenta 20 aulas
Consultar e transformar com conferência

Consulta em camadas: por que o SQL de 80 linhas é uma armadilha

Conceito 6 min de leitura

Como pedir a consulta em pedaços que você consegue conferir, e a contagem de controle que acompanha cada camada.

Peça a análise inteira e vem um SQL de 80 linhas com quatro CTEs. Ele roda. Devolve uma tabela bonita. E você não tem como saber se está certo — só se está sem erro de sintaxe.

Ao final desta aula você consegue
  • Montar consultas em camadas conferíveis.
  • Associar uma contagem de controle a cada camada.
  • Encontrar o ponto exato onde o número deixa de bater.

A diferença entre código e análise aparece aqui de novo: um programa de 80 linhas errado costuma quebrar. Uma consulta de 80 linhas errada devolve uma tabela plausível. Não existe teste automático dizendo que o número está torto.

A substituição é a contagem de controle: a cada camada, um número que você consegue conferir contra algo conhecido. Se a camada 1 dá 3.412 pedidos e o financeiro fechou o mês com 3.412 pedidos, a camada 1 está certa. Se a camada 2 dá 11.847, você sabe exatamente onde a linha multiplicou.

O bloco único
WITH base AS (...), enriquecido AS (...),
     agregado AS (...), final AS (...)
SELECT * FROM final;

-- resultado: uma tabela com 14 colunas e 38 linhas

Se o número final estiver errado, você não tem como saber em qual das quatro camadas. Recomeça do zero.

Camada por camada, com controle
-- Camada 1: universo de pedidos
SELECT COUNT(*), SUM(valor) FROM pedidos
WHERE criado_em >= '2026-03-01' AND criado_em < '2026-04-01'
  AND status NOT IN (3, 7);
-- 3.412 | R$ 2.108.443,10   ✓ bate com o fechamento

-- Camada 2: junta cliente (1:1 — não pode mudar a contagem)
SELECT COUNT(*), SUM(p.valor)
FROM pedidos p JOIN clientes c ON c.id = p.cliente_id
WHERE ...;
-- 3.401 | R$ 2.103.201,40   ✗ perdeu 11 pedidos!
--   → 11 pedidos com cliente_id órfão. Investigar antes de seguir.

O problema apareceu na camada 2, com 11 pedidos identificados. Sem a contagem de controle, esses R$ 5 mil sumiriam em silêncio.

A diferença: A regra: toda junção que deveria ser 1:1 precisa preservar a contagem. Se mudou, ou há órfão (INNER JOIN perdendo linha) ou há duplicata na tabela da direita.

A tabela de controle da análise

CamadaO que fazControle esperado
1. UniversoFiltra período, status, exclusõesBate com uma fonte externa
2. EnriquecimentoJunta dimensões 1:1Contagem não muda
3. Agregação de filhosSoma itens, eventosContagem da camada 1 preservada
4. MétricaCalcula a taxa/médiaNumerador ≤ denominador; nulos declarados
5. RecorteQuebra por segmentoSoma dos segmentos = total da camada 4

A camada 5 tem a conferência mais fácil e mais esquecida: se a soma dos segmentos não dá o total, algum registro caiu num segmento nulo que ninguém viu.

Pedir a consulta em camadas
Preciso responder: [pergunta da especificação]

Contexto: [cole o dicionário de dados]
Especificação: [cole as definições fixadas]

Monte a consulta em camadas separadas, NÃO em um bloco único.
Para cada camada, entregue:
- a consulta
- o que ela deve produzir em uma frase
- a CONTAGEM DE CONTROLE que eu devo checar antes de seguir
- o que significa se o controle não bater

Comece só pela camada 1. Espere eu confirmar o número antes de
escrever a camada 2.

A última linha é o que impede as 80 linhas de aparecerem de uma vez. Custa mais mensagens e encontra o erro na camada em que ele nasceu.

ArmadilhaO `SELECT *` que esconde a duplicata

Olhar as primeiras linhas de um SELECT * não revela duplicação: as 10 primeiras linhas parecem normais. A duplicata só aparece na contagem ou na soma.

Por isso a conferência é sempre COUNT(*) e SUM(), nunca "olhei o resultado e parecia certo".

Como perceber: Você validou uma consulta olhando o LIMIT 10.

Checagem antes de seguir
  • Cada camada tem uma contagem de controle definida antes de rodar.
  • A camada 1 bate com uma fonte independente.
  • Junções 1:1 preservaram a contagem.
  • A soma dos segmentos bate com o total.
  • Nenhuma validação foi feita olhando LIMIT 10.
Em uma frase
  • Toda camada precisa de um número que você consiga conferir contra algo que já sabe.

Comentários e dúvidas

Inscreva-se grátis para comentar, tirar dúvidas, marcar seu progresso e emitir o certificado ao fim do curso.

Inscrever-se grátis com Google

Ainda não há comentários nesta aula.