
Imagine que você acabou de entrar em uma empresa de varejo.
Na sua primeira reunião, o gerente faz uma pergunta aparentemente simples.
Quais produtos cadastrados nunca foram vendidos?
Essa informação pode parecer apenas uma curiosidade.
Mas, na prática, ela pode ajudar a responder perguntas importantes.
- Existem produtos ocupando espaço sem gerar receita?
- O catálogo está grande demais?
- Existem itens cadastrados incorretamente?
- Há produtos novos que ainda não foram divulgados?
Perceba que a pergunta não é sobre SQL.
É sobre o negócio.
O SQL será apenas a ferramenta para encontrar a resposta.
Antes da consulta, entenda o problema
Temos duas tabelas.
Uma contém todos os produtos cadastrados.
PRODUTOOutra registra cada item vendido.
ITEM_PEDIDOA pergunta é simples.
Queremos encontrar produtos existentes na tabela PRODUTO que não aparecem em nenhum registro da tabela ITEM_PEDIDO.
Antes de abrir o editor, já sabemos duas coisas.
Precisamos manter todos os produtos no resultado.
E identificar aqueles que não possuem relacionamento.
Como um analista pensa?
Em vez de procurar imediatamente um comando SQL, um analista costuma responder algumas perguntas.
Quem deve aparecer?
Todos os produtos.
Inclusive aqueles que nunca venderam.
Onde descubro se houve venda?
Na tabela responsável pelos itens dos pedidos.
Como relaciono essas informações?
Pela chave do produto.
Depois que esse raciocínio está claro, escrever a consulta fica muito mais fácil.
A solução
Seguindo o padrão utilizado aqui no Blog do SQL:
SELECT
p.ID_PRODUTO,
p.NOME
FROM produto p
LEFT JOIN item_pedido ip
ON p.ID_PRODUTO = ip.ID_PRODUTO
WHERE ip.ID_PRODUTO IS NULL;Essa consulta retorna exatamente os produtos que nunca participaram de uma venda.
Por que utilizar LEFT JOIN?
Aqui está o ponto principal.
Se utilizarmos um INNER JOIN, apenas produtos que possuem vendas aparecerão.
Mas o nosso objetivo é justamente encontrar aqueles que ficaram de fora.
O LEFT JOIN preserva todos os registros da tabela PRODUTO.
Quando não existe um item correspondente em ITEM_PEDIDO, os campos dessa tabela ficam com valor NULL.
É justamente isso que utilizamos no filtro.
O papel do IS NULL
Depois do relacionamento, basta identificar os registros sem correspondência.
WHERE IP.ID_PRODUTO IS NULL;Essa condição elimina todos os produtos vendidos.
O resultado final contém apenas aqueles que nunca geraram receita.
Esse padrão aparece em muitos sistemas
Embora este exemplo utilize produtos e vendas, o raciocínio é exatamente o mesmo em diversos cenários.
Você pode identificar:
- clientes que nunca compraram;
- alunos que nunca acessaram um curso;
- fornecedores sem pedidos;
- vendedores sem vendas;
- equipamentos nunca utilizados;
- categorias sem produtos.
O padrão lógico permanece igual.
Muda apenas o contexto.
O erro mais comum
Muitos iniciantes decoram que:
“LEFT JOIN serve para trazer todos os registros.”
Mas isso não explica quando utilizá-lo.
Neste caso, escolhemos o LEFT JOIN porque queremos preservar todos os produtos, inclusive aqueles sem relacionamento.
Quando você entende o motivo da escolha, deixa de decorar comandos e passa a tomar decisões conscientes.
Como esse resultado pode ajudar a empresa?
Imagine que a consulta retornou cinquenta produtos.
Isso não significa automaticamente que todos devem ser removidos.
Alguns podem:
- ter sido cadastrados recentemente;
- estar aguardando lançamento;
- depender de reposição de estoque;
- fazer parte de uma estratégia específica.
O papel do analista não é decidir sozinho.
É fornecer informações que apoiem a tomada de decisão.
Essa diferença é muito importante.
Continue investigando…
Agora tente responder outras perguntas utilizando o mesmo modelo.
- Quais categorias não possuem produtos?
- Quais clientes compraram apenas uma vez?
- Quais vendedores nunca realizaram uma venda?
- Quais produtos venderam apenas uma unidade?
Perceba como uma única consulta pode dar origem a vários estudos de caso.
O que você aprendeu neste artigo?
Muito mais do que utilizar um LEFT JOIN.
Você aprendeu a transformar uma pergunta de negócio em uma consulta SQL.
Esse é exatamente o tipo de desafio encontrado na rotina de quem trabalha com dados.
O comando é importante.
Mas ele sempre vem depois da pergunta.
Próximo passo
Esse é apenas um dos muitos cenários trabalhados na Baseoteca SQL.
Lá você encontra diferentes bancos de dados e contextos de negócio para praticar consultas em situações próximas das que aparecem no mercado, desenvolvendo muito mais do que conhecimento de sintaxe.
Você aprende a interpretar problemas, entender modelos relacionais e construir soluções utilizando SQL.
Porque, no dia a dia de um analista, ninguém pergunta se você sabe LEFT JOIN.
As pessoas perguntam:
“Você consegue descobrir por que esse produto nunca vendeu?”
E é exatamente essa habilidade que faz diferença.
0 Comentários