LEFT/RIGHT JOIN e junções OUTER
Use LEFT JOIN para manter linhas sem correspondência, entenda junções RIGHT e FULL OUTER e detecte dados ausentes com WHERE x IS NULL.
LEFT/RIGHT JOIN e junções OUTER é uma aula grátis de SQL Academy no CoddyKit. Esta é a aula 3 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.
LEFT JOIN: mantenha todas as linhas da esquerda
LEFT JOIN retorna todas as linhas da tabela da esquerda, com as colunas correspondentes do lado direito ou NULL quando não há correspondência.
SELECT u.id, u.email, o.id AS order_id
FROM users u
LEFT JOIN orders o ON o.user_id = u.id;
-- Users without orders still appear, with order_id = NULL.RIGHT JOIN
É o espelho de LEFT JOIN — mantém todas as linhas da direita. A maioria das pessoas simplesmente reescreve as junções RIGHT como LEFT para facilitar a leitura:
SELECT u.id, u.email, o.id
FROM orders o
RIGHT JOIN users u ON u.id = o.user_id;
-- Equivalent to LEFT JOIN with sides swapped:
SELECT u.id, u.email, o.id
FROM users u
LEFT JOIN orders o ON o.user_id = u.id;FULL OUTER JOIN
Mantém as linhas dos dois lados. As colunas sem correspondência recebem NULL:
SELECT u.email, o.id AS order_id
FROM users u
FULL OUTER JOIN orders o ON o.user_id = u.id;Encontrando correspondências ausentes
Um LEFT JOIN com WHERE right.id IS NULL encontra as linhas da tabela da esquerda que não têm correspondência à direita — a clássica "anti-junção":
SELECT u.id, u.email
FROM users u
LEFT JOIN orders o ON o.user_id = u.id
WHERE o.id IS NULL; -- users who have never placed an orderLEFT JOIN com agregação
Útil para relatórios com "0 quando ausente":
SELECT u.id, u.email, COUNT(o.id) AS order_count
FROM users u
LEFT JOIN orders o ON o.user_id = u.id
GROUP BY u.id, u.email
ORDER BY order_count DESC;A posição do filtro é importante
Filtros na tabela da direita em WHERE transformam um LEFT JOIN novamente em um INNER JOIN. Coloque-os em ON para preservar o comportamento de LEFT:
-- Drops users without paid orders entirely:
SELECT u.id, COUNT(o.id)
FROM users u
LEFT JOIN orders o ON o.user_id = u.id
WHERE o.status = 'paid'
GROUP BY u.id;
-- Keeps users with no paid orders:
SELECT u.id, COUNT(o.id)
FROM users u
LEFT JOIN orders o
ON o.user_id = u.id AND o.status = 'paid'
GROUP BY u.id;Vários LEFT JOINs
Encadeie-os. Cada LEFT preserva as linhas à esquerda desse operador:
SELECT u.email, o.id, p.name
FROM users u
LEFT JOIN orders o ON o.user_id = u.id
LEFT JOIN products p ON p.id = o.product_id;Desempenho de LEFT JOIN
LEFT JOIN tem uma pequena sobrecarga em relação a INNER, pois o planejador precisa manter as linhas sem correspondência. Muitas vezes ela é insignificante — mas, se você não precisa das linhas sem correspondência, INNER JOIN é um pouco mais econômico.
Junção externa e saída NULL
A saída NULL de um LEFT JOIN pode surpreender o código posterior. Use COALESCE para fornecer valores padrão:
SELECT u.email, COALESCE(SUM(o.total), 0) AS revenue
FROM users u
LEFT JOIN orders o ON o.user_id = u.id
GROUP BY u.email;CROSS JOIN — quando você quer todos os pares
Faz a junção de cada linha de A com cada linha de B. Use com moderação:
SELECT d.date, u.id
FROM users u
CROSS JOIN generate_series('2024-01-01', '2024-01-07', INTERVAL '1 day') AS d(date);Padrões de anti-junção
Três formas idiomáticas de encontrar "elementos da esquerda sem correspondência":
-- LEFT JOIN ... WHERE IS NULL
SELECT u.* FROM users u
LEFT JOIN orders o ON o.user_id = u.id
WHERE o.id IS NULL;
-- NOT EXISTS (often the planner's favourite)
SELECT u.* FROM users u
WHERE NOT EXISTS (SELECT 1 FROM orders o WHERE o.user_id = u.id);Recapitulação
As junções OUTER mantêm as linhas sem correspondência.
- LEFT = todas as linhas da esquerda; NULL à direita quando não há correspondência
- RIGHT = o espelho; use LEFT para facilitar a leitura
- FULL OUTER = os dois lados
- Anti-junção = LEFT JOIN ... WHERE right IS NULL
Verificação rápida
Qual tipo de JOIN retorna usuários mesmo que eles tenham NO pedidos?
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 “LEFT/RIGHT JOIN e junções OUTER” é grátis?
Sim — o texto completo de “LEFT/RIGHT JOIN e junções OUTER” é 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 “LEFT/RIGHT JOIN e junções OUTER”?
Use LEFT JOIN para manter linhas sem correspondência, entenda junções RIGHT e FULL OUTER e detecte dados ausentes com WHERE x IS NULL. 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 3 de 4.
Quanto tempo leva a aula “LEFT/RIGHT JOIN e junções OUTER”?
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
- Por que usar JOIN (recapitulação do modelo relacional)
- Mecânica de INNER JOIN
- LEFT/RIGHT JOIN e junções OUTER
- Junções da tabela consigo mesma e apelidos