SQL Academy · Aula

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.

Aula 3 de 413 etapas

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 order

LEFT 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?

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 “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

  1. Por que usar JOIN (recapitulação do modelo relacional)
  2. Mecânica de INNER JOIN
  3. LEFT/RIGHT JOIN e junções OUTER
  4. Junções da tabela consigo mesma e apelidos
← Voltar para SQL Academy