← Voltar ao blog

5 erros comuns em JOINs SQL que todo desenvolvedor comete

JOIN é a base do SQL relacional e a fonte dos bugs mais caros: os cinco erros de junção mais comuns, com o exemplo errado, o certo e o motivo.


JOINs são a base do SQL relacional, mas também a fonte de muitos bugs. Aqui estão os 5 erros mais comuns e como evitá-los.

1. INNER JOIN quando deveria ser LEFT JOIN

Se você quer todos os clientes, mesmo os sem pedidos, use LEFT JOIN:

-- Errado: perde clientes sem pedidos
SELECT c.nome, p.valor
FROM clientes c
INNER JOIN pedidos p ON p.cliente_id = c.id

-- Correto: mantém todos os clientes
SELECT c.nome, COALESCE(p.valor, 0) AS valor
FROM clientes c
LEFT JOIN pedidos p ON p.cliente_id = c.id

2. Condição no WHERE em vez de ON (com LEFT JOIN)

-- Errado: transforma LEFT JOIN em INNER JOIN
SELECT c.nome, p.valor
FROM clientes c
LEFT JOIN pedidos p ON p.cliente_id = c.id
WHERE p.data_pedido >= CURRENT_DATE - 30

-- Correto: condição no ON
SELECT c.nome, p.valor
FROM clientes c
LEFT JOIN pedidos p ON p.cliente_id = c.id AND p.data_pedido >= CURRENT_DATE - 30

3. JOIN sem condição (produto cartesiano)

-- CUIDADO: retorna N×M linhas!
SELECT c.nome, p.valor
FROM clientes c, pedidos p

4. Usar SELECT * em JOINs

-- Errado: retorna colunas duplicadas
SELECT * FROM clientes c JOIN pedidos p ON p.cliente_id = c.id

-- Correto: selecione colunas específicas
SELECT c.nome, p.valor, p.data_pedido
FROM clientes c JOIN pedidos p ON p.cliente_id = c.id

5. Esquecer de indexar chaves estrangeiras

-- Crie índice na FK para performance
CREATE INDEX idx_pedidos_cliente ON pedidos(cliente_id);

Montar JOINs complexos pode ser difícil. Descreva o que você quer em português e o Sqlify gera a query com os JOINs corretos.

Conclusão

JOINs são poderosos mas exigem atenção. Sempre use ON para as condições de junção, WHERE para filtros, e índices nas chaves estrangeiras.