0Pricing
Coding Interview Prep · Aula

Semântica de RIGHT e FULL OUTER JOIN

Saiba quando cada um é necessário e como reescrever RIGHT como LEFT.

Semântica de RIGHT e FULL OUTER JOIN é uma aula grátis de Coding Interview Prep no CoddyKit. Esta é a aula 2 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 Coding Interview Prep, e seu progresso é sincronizado entre a web e o app CoddyKit. O curso de Coding Interview Prep inclui 4 aulas no total.

Além de LEFT JOIN

Depois que você entende LEFT JOIN, os entrevistadores testam a imagem espelhada e a união das duas: RIGHT JOIN e FULL OUTER JOIN.

  • RIGHT JOIN preserva todas as linhas da tabela à direita.
  • FULL OUTER JOIN preserva as linhas sem correspondência de ambas as tabelas.

Esta lição define cada uma com precisão e mostra o truque de reescrita que os entrevistadores adoram: qualquer RIGHT JOIN pode se tornar uma LEFT JOIN.

Definição de RIGHT JOIN

Uma RIGHT JOIN (ou RIGHT OUTER JOIN) mantém todas as linhas da tabela à direita, aquela escrita depois da palavra-chave JOIN. As linhas direitas sem correspondência aparecem com NULL nas colunas da tabela à esquerda.

É o espelho exato de LEFT JOIN. Enquanto LEFT preserva a tabela mencionada primeiro, RIGHT preserva a mencionada em segundo lugar.

SELECT c.name, o.amount
FROM orders o
RIGHT JOIN customers c
  ON o.customer_id = c.id;
-- keeps ALL customers, even those
-- with no order (Carol -> amount NULL)

As tabelas novamente

Os mesmos dados de antes. Carol (cliente 3) não tem pedidos. Aqui, todas as linhas de pedidos fazem referência a um cliente existente; portanto, quando clientes são o lado preservado, nenhum pedido fica órfão.

-- customers           orders
-- 1 | Alice           10 | 1 | 50
-- 2 | Bob             11 | 1 | 75
-- 3 | Carol           12 | 2 | 20

Reescrevendo RIGHT como LEFT

A conclusão importante para a entrevista: RIGHT JOIN é raramente usada na prática, porque você sempre pode inverter a ordem das tabelas e usar uma LEFT JOIN. As duas consultas abaixo são logicamente idênticas.

Muitos guias de estilo proíbem RIGHT JOIN por completo, porque ler da esquerda para a direita e sempre preservar a tabela à esquerda é mais fácil de entender.

-- RIGHT JOIN
SELECT c.name, o.amount
FROM orders o
RIGHT JOIN customers c ON o.customer_id = c.id;

-- Equivalent LEFT JOIN (preferred)
SELECT c.name, o.amount
FROM customers c
LEFT JOIN orders o ON o.customer_id = c.id;

Definição de FULL OUTER JOIN

O FULL OUTER JOIN mantém as linhas sem correspondência de ambas as tabelas. Pense nele como uma LEFT JOIN e uma RIGHT JOIN combinadas:

  • Pares correspondentes aparecem normalmente.
  • Linhas esquerdas sem correspondência: colunas direitas NULL.
  • Linhas direitas sem correspondência: colunas esquerdas NULL.

Ele responde a "mostre tudo dos dois lados, alinhando as correspondências".

SELECT c.name, o.id AS order_id
FROM customers c
FULL OUTER JOIN orders o
  ON o.customer_id = c.id;

Quando FULL OUTER se destaca

FULL OUTER JOIN é a opção ideal para reconciliação: comparar dois conjuntos de dados que deveriam coincidir, mas talvez não coincidam.

Imagine uma tabela orders e uma tabela payments separada. Uma FULL OUTER JOIN pelo identificador do pedido revela, em um único resultado, os pedidos sem pagamento e os pagamentos sem um pedido correspondente, cada um identificado por valores NULL no lado ausente.

SELECT o.id AS order_id, p.id AS payment_id
FROM orders o
FULL OUTER JOIN payments p
  ON p.order_id = o.id
WHERE o.id IS NULL OR p.id IS NULL;
-- rows where one side is missing

Consciência dos dialetos

Um entrevistador pode avaliar seu conhecimento sobre portabilidade. MySQL não possui a palavra-chave FULL OUTER JOIN (até a versão 8). Postgres, SQL Server e Oracle oferecem suporte a ela.

No MySQL, você pode simular esse comportamento combinando um LEFT JOIN e um RIGHT JOIN com UNION (que remove as linhas correspondentes duplicadas). Conhecer essa diferença demonstra experiência prática.

-- FULL OUTER JOIN emulated in MySQL
SELECT c.name, o.id FROM customers c
LEFT JOIN orders o ON o.customer_id = c.id
UNION
SELECT c.name, o.id FROM customers c
RIGHT JOIN orders o ON o.customer_id = c.id;

Os quatro tipos de JOIN em resumo

Mantenha esta tabela em mente. "Preservada" significa que as linhas sem correspondência permanecem com valores NULL.

  • INNER JOIN: apenas linhas correspondentes. Nada é preservado.
  • LEFT JOIN: todas as linhas da esquerda são preservadas.
  • RIGHT JOIN: todas as linhas da direita são preservadas.
  • FULL OUTER JOIN: ambos os lados são preservados.

Toda pergunta de entrevista sobre junções externas se resume a escolher qual lado, ou quais lados, preservar.

Escolhendo entre elas

Escolha a junção perguntando: "quais linhas sem correspondência preciso manter?"

  • Manter apenas as linhas da tabela principal: LEFT JOIN (coloque a tabela principal primeiro).
  • Precisar dos dois conjuntos sem correspondência para uma reconciliação: FULL OUTER JOIN.
  • Importarem apenas as correspondências: INNER JOIN.

Quase nunca se escolhe RIGHT JOIN diretamente; reformule a consulta como LEFT JOIN.

Um exemplo de reconciliação

Use FULL OUTER JOIN para rotular o status de cada linha. CASE aplicado ao padrão de NULL informa qual lado está ausente, como na consulta clássica de auditoria.

SELECT
  COALESCE(o.id, p.order_id) AS ord,
  CASE
    WHEN p.id IS NULL THEN 'no payment'
    WHEN o.id IS NULL THEN 'orphan payment'
    ELSE 'matched'
  END AS status
FROM orders o
FULL OUTER JOIN payments p ON p.order_id = o.id;

Equívoco comum

Os candidatos muitas vezes pensam que FULL OUTER JOIN retorna o produto cartesiano das linhas sem correspondência. Isso não acontece. As linhas sem correspondência de cada lado aparecem exatamente uma vez, acompanhadas de NULL, e nunca são multiplicadas umas pelas outras.

As linhas correspondentes ainda seguem a multiplicação normal da junção (uma linha de saída por par correspondente), a mesma regra de expansão de qualquer junção.

Verificação rápida

Um entrevistador pede que você reescreva uma consulta para uma equipe que proíbe RIGHT JOIN.

Recapitulação

RIGHT JOIN preserva a tabela da direita; FULL OUTER JOIN preserva ambas. Qualquer RIGHT JOIN pode ser reescrito como LEFT JOIN trocando a ordem das tabelas, por isso as equipes preferem LEFT.

  • FULL OUTER é ideal para reconciliar dois conjuntos de dados.
  • MySQL não possui FULL OUTER; simule-o com LEFT + RIGHT + UNION.
  • Escolha uma junção decidindo quais linhas sem correspondência manter.
  • As linhas sem correspondência aparecem uma vez com NULL, nunca como um produto cartesiano.

Perguntas Frequentes

A aula “Semântica de RIGHT e FULL OUTER JOIN” é grátis?

Sim — o texto completo de “Semântica de RIGHT e FULL OUTER JOIN” é 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 Coding Interview Prep, atualize para CoddyKit PRO. O curso de Coding Interview Prep inclui 4 aulas no total.

O que vou aprender em “Semântica de RIGHT e FULL OUTER JOIN”?

Saiba quando cada um é necessário e como reescrever RIGHT como LEFT. Você pratica Coding Interview Prep 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 Coding Interview Prep?

Nenhuma experiência prévia é necessária. Coding Interview Prep 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 2 de 4.

Quanto tempo leva a aula “Semântica de RIGHT e FULL OUTER JOIN”?

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 Coding Interview Prep?

Sim. Cada aula de Coding Interview Prep 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. LEFT JOIN e preservação de linhas sem correspondência
  2. Semântica de RIGHT e FULL OUTER JOIN
  3. Encontrando linhas sem correspondência (anti-junção)
  4. A armadilha de WHERE em junções externas
← Voltar para Coding Interview Prep