Mantenha o SQLtest vivo: Ajude a cobrir os custos do servidor de $100 deste mês para manter todas as lições e o playground SQL online. Apoie o projeto →
Código SQL copiado para a área de transferência

Lição 5.4 · Tempo de leitura: ~4 min

O SQL RIGHT JOIN devolve todas as linhas da tabela da direita e as linhas correspondentes da tabela da esquerda; quando não há correspondência, as colunas da tabela da esquerda ficam NULL. Nesta lição, você vai aprender a sintaxe do RIGHT JOIN, como ele espelha o LEFT JOIN e por que a maioria dos desenvolvedores o reescreve como LEFT JOIN.

SQL RIGHT JOIN: Manter Todas as Linhas da Tabela da Direita

O RIGHT JOIN é a imagem espelhada do LEFT JOIN. A única diferença é qual tabela mantém todas as suas linhas: no LEFT JOIN é a tabela depois de FROM, no RIGHT JOIN é a tabela depois de JOIN.

SQL RIGHT JOIN: todas as linhas da tabela da direita são mantidas e as linhas sem correspondência recebem NULL nas colunas da esquerda; o mesmo resultado de um LEFT JOIN com as tabelas trocadas

O Que o RIGHT JOIN Devolve

  • Cada linha da tabela da direita (a que vem depois de RIGHT JOIN) aparece no resultado.
  • As linhas com correspondências são combinadas com elas, como no INNER JOIN.
  • As linhas sem correspondência recebem NULL em todas as colunas da tabela da esquerda.

RIGHT JOIN e RIGHT OUTER JOIN são a mesma coisa.

Sintaxe Básica

SELECT left_table.column1, right_table.column2
FROM left_table
RIGHT JOIN right_table ON left_table.key_column = right_table.key_column;

Exemplo: Todos os Endereços e os Seus Funcionários

A tabela address guarda os endereços de clientes, funcionários e lojas. Para listar todos os endereços e mostrar quais pertencem a funcionários:

SELECT s.first_name, s.last_name, a.address, a.district
FROM staff AS s
RIGHT JOIN address AS a ON s.address_id = a.address_id
ORDER BY s.staff_id IS NULL, a.address
LIMIT 10;

Resultado: todos os 603 endereços; os dois endereços dos funcionários vêm primeiro com os seus nomes, os restantes têm NULL em first_name e last_name.


RIGHT JOIN como LEFT JOIN

Qualquer RIGHT JOIN pode ser reescrito como LEFT JOIN trocando as tabelas de lugar. Estas duas consultas devolvem as mesmas linhas:

-- RIGHT JOIN: todos os endereços são mantidos
SELECT s.first_name, s.last_name, a.address
FROM staff AS s
RIGHT JOIN address AS a ON s.address_id = a.address_id;
-- LEFT JOIN com as tabelas trocadas: o mesmo resultado
SELECT s.first_name, s.last_name, a.address
FROM address AS a
LEFT JOIN staff AS s ON s.address_id = a.address_id;

Resultado: as duas consultas devolvem 603 linhas.

A maioria dos desenvolvedores usa apenas LEFT JOIN. Assim a consulta lê-se naturalmente: a tabela principal vem primeiro depois de FROM, e cada junção seguinte apenas acrescenta informação a ela. Misturar LEFT e RIGHT numa consulta dificulta ver quais linhas têm garantia de permanecer.


Quando o RIGHT JOIN É Útil

  • Ler código existente. Você vai encontrar RIGHT JOIN em consultas de outras pessoas e em consultas geradas por ferramentas.
  • Adicionar uma tabela no fim de uma consulta longa. Às vezes é mais simples acrescentar um RIGHT JOIN do que reordenar uma longa cadeia de junções. Mesmo assim, reescrever a consulta com LEFT JOIN costuma deixá-la mais clara.

O SQLite só passou a suportar RIGHT JOIN na versão 3.39 (2022); em versões mais antigas, use LEFT JOIN com as tabelas trocadas.


Principais conclusões:

  • O RIGHT JOIN mantém cada linha da tabela da direita; as linhas sem correspondência recebem NULL nas colunas da esquerda.
  • A RIGHT JOIN B devolve as mesmas linhas que B LEFT JOIN A.
  • A maioria das consultas usa LEFT JOIN com a tabela principal depois de FROM: é mais fácil de ler.
  • Evite misturar LEFT JOIN e RIGHT JOIN numa mesma consulta.

Perguntas Frequentes

Qual é a diferença entre LEFT JOIN e RIGHT JOIN?

O LEFT JOIN mantém todas as linhas da tabela depois de FROM; o RIGHT JOIN mantém todas as linhas da tabela depois de JOIN. Trocar as tabelas transforma um no outro.

Por que os desenvolvedores raramente usam RIGHT JOIN?

Porque um LEFT JOIN com as tabelas trocadas dá o mesmo resultado e lê-se de forma mais natural: a tabela principal vem primeiro, e as tabelas juntadas acrescentam-lhe detalhes.

RIGHT JOIN é o mesmo que RIGHT OUTER JOIN?

Sim. A palavra-chave OUTER é opcional.