O RIGHT JOIN (ou RIGHT OUTER JOIN) é o oposto lógico do LEFT JOIN. Ele garante que todas as linhas da tabela da "direita" (a mencionada após a palavra-chave JOIN) sejam incluídas no conjunto de resultados, independentemente de terem ou não uma correspondência na tabela da "esquerda".
Um RIGHT JOIN retorna todas as linhas da tabela da direita e as linhas correspondentes da tabela da esquerda. Se não houver correspondência na tabela da esquerda, o resultado conterá valores NULL para as colunas da tabela da esquerda.
Visualização:
Tabela A (customer) Tabela B (payment)
+----+----------+ +----+----------+
| id | name | | id | amount |
+----+----------+ +----+----------+
| 1 | Alice | <--------> | 1 | 10.00 | (Correspondência!)
| NULL | <--------> | 4 | 50.00 | (Sem correspondência, mantém Pagamento 4!)
+----+----------+ +----+----------+
Neste exemplo, o pagamento com ID 4 é mantido mesmo que nenhum cliente esteja associado a ele (embora em um banco de dados bem projetado como o Sakila, isso seja raro devido às restrições de chave estrangeira).
A sintaxe segue o mesmo padrão das outras junções:
SELECT
table1.column1,
table2.column2
FROM
table1
RIGHT JOIN
table2 ON table1.common_column = table2.common_column;
RIGHT JOIN: Garante que todas as linhas da table2 (a tabela da direita) sejam mantidas.ON: Especifica a condição de junção.Embora o RIGHT JOIN seja menos comum na prática do que o LEFT JOIN (porque qualquer RIGHT JOIN pode ser reescrito como um LEFT JOIN invertendo a ordem das tabelas), ainda é importante compreendê-lo.
Suponha que queiramos ver todos os endereços em nosso sistema e verificar se algum funcionário está atribuído a eles no momento.
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
ORDER BY
s.last_name;
Isso retornará todos os endereços da tabela address. Se um endereço não tiver funcionário, os nomes serão NULL.
Cada RIGHT JOIN pode ser expresso como um LEFT JOIN. A maioria dos desenvolvedores SQL prefere usar LEFT JOIN exclusivamente e simplesmente reordenar as tabelas para manter a tabela "principal" à esquerda. Isso geralmente torna a consulta mais fácil de ler de cima para baixo.
Exemplo de equivalência:
-- Usando RIGHT JOIN
SELECT f.title, i.inventory_id
FROM film f
RIGHT JOIN inventory i ON f.film_id = i.film_id;
-- Usando LEFT JOIN (mesmo resultado)
SELECT f.title, i.inventory_id
FROM inventory i
LEFT JOIN film f ON i.film_id = f.film_id;
LEFT JOIN.