O comando RIGHT JOIN é utilizado para retornar todos os registros da tabela que está à direita da consulta, mesmo quando não existe correspondência na tabela da esquerda.
Ele funciona de forma semelhante ao LEFT JOIN, porém mantendo todos os registros da segunda tabela.
No RIGHT JOIN, a tabela escrita após o comando JOIN é considerada a tabela principal.
FROM clientes
RIGHT JOIN pedidos
Todos os pedidos serão exibidos, mesmo quando não existir cliente relacionado.
SELECT
tabela1.coluna,
tabela2.coluna
FROM tabela1
RIGHT JOIN tabela2
ON tabela1.id = tabela2.id;
CLIENTES
+----+----------+
| ID | Nome |
+----+----------+
| 1 | Ana |
| 2 | Carlos |
| 3 | Pedro |
+----+----------+
PEDIDOS
+----+------------+-------+
| ID | Cliente_ID | Valor |
+----+------------+-------+
| 1 | 1 | 500 |
| 2 | 2 | 700 |
| 3 | 5 | 300 |
+----+------------+-------+
SELECT
clientes.nome,
pedidos.valor
FROM clientes
RIGHT JOIN pedidos
ON clientes.id = pedidos.cliente_id;
Resultado:
Ana | 500
Carlos | 700
NULL | 300
O pedido 3 aparece mesmo sem possuir cliente cadastrado.
SELECT
c.nome,
p.valor
FROM clientes c
RIGHT JOIN pedidos p
ON c.id = p.cliente_id;
O uso de aliases facilita a leitura das consultas.
Podemos utilizar RIGHT JOIN para encontrar registros existentes na tabela direita que não possuem relacionamento.
SELECT
p.id,
p.valor
FROM clientes c
RIGHT JOIN pedidos p
ON c.id = p.cliente_id
WHERE c.id IS NULL;
Retorna pedidos sem cliente associado.
| RIGHT JOIN | LEFT JOIN |
|---|---|
| Mantém todos da direita | Mantém todos da esquerda |
| Pode retornar NULL na esquerda | Pode retornar NULL na direita |
| Pouco utilizado | Mais utilizado no dia a dia |
Na prática, muitos desenvolvedores preferem utilizar LEFT JOIN invertendo a ordem das tabelas.
-- RIGHT JOIN
clientes
RIGHT JOIN pedidos
-- Mesmo resultado usando LEFT JOIN
pedidos
LEFT JOIN clientes
| Sistema | Utilização |
|---|---|
| E-commerce | Pedidos sem clientes cadastrados |
| Financeiro | Transações sem cadastro completo |
| Escola | Matrículas sem aluno relacionado |
| Hospital | Consultas sem paciente vinculado |
| Erro | Problema |
|---|---|
| Confundir com LEFT JOIN | Resultado inesperado |
| Trocar ordem das tabelas | Muda os registros mantidos |
| Usar sem relacionamento | Dados incorretos |
| Ignorar índices | Baixo desempenho |