Qual a diferença entre INNER JOIN e OUTER JOIN?
Os JOINs no SQL são usados para combinar dados de diferentes tabelas. A principal diferença entre INNER JOIN
e OUTER JOIN
está na forma como lidam com registros que não possuem correspondência.
O que é INNER JOIN?
O INNER JOIN
retorna apenas os registros que possuem correspondência em ambas as tabelas.
SELECT clientes.nome, pedidos.id, pedidos.valor
FROM clientes
INNER JOIN pedidos ON clientes.id = pedidos.cliente_id;
Aqui, a consulta retorna apenas os clientes que possuem pedidos registrados.
O que é OUTER JOIN?
O OUTER JOIN
retorna todos os registros de uma das tabelas, mesmo que não haja correspondência na outra. Ele pode ser dividido em:
- LEFT OUTER JOIN (ou simplesmente LEFT JOIN) – Retorna todos os registros da tabela da esquerda, preenchendo com
NULL
onde não houver correspondência. - RIGHT OUTER JOIN (ou simplesmente RIGHT JOIN) – Retorna todos os registros da tabela da direita, preenchendo com
NULL
onde não houver correspondência.
Exemplo de LEFT OUTER JOIN
SELECT clientes.nome, pedidos.id, pedidos.valor
FROM clientes
LEFT JOIN pedidos ON clientes.id = pedidos.cliente_id;
Isso retorna todos os clientes, incluindo aqueles que não possuem pedidos.
Exemplo de RIGHT OUTER JOIN
SELECT clientes.nome, pedidos.id, pedidos.valor
FROM clientes
RIGHT JOIN pedidos ON clientes.id = pedidos.cliente_id;
Agora, todos os pedidos aparecem, mesmo aqueles sem clientes associados.
Diferença entre INNER JOIN e OUTER JOIN
JOIN | O que retorna? |
---|---|
INNER JOIN | Apenas registros correspondentes em ambas as tabelas |
LEFT OUTER JOIN | Todos os registros da tabela da esquerda, mesmo sem correspondência |
RIGHT OUTER JOIN | Todos os registros da tabela da direita, mesmo sem correspondência |
Quando usar INNER JOIN e OUTER JOIN?
- Use INNER JOIN se quiser apenas os registros que existem em ambas as tabelas.
- Use LEFT JOIN se precisar garantir que todos os registros da tabela principal estejam incluídos.
- Use RIGHT JOIN se quiser priorizar os registros da segunda tabela.
- Use FULL OUTER JOIN quando precisar combinar todos os registros de ambas as tabelas, preenchendo com
NULL
onde necessário.
Quando escolher INNER JOIN ou OUTER JOIN?
A escolha entre INNER JOIN
e OUTER JOIN
no SQL depende do tipo de análise que queremos fazer nos dados. Em sistemas de gerenciamento de pedidos, por exemplo, um INNER JOIN
pode ser usado para listar apenas os pedidos que possuem um cliente associado. Já um LEFT JOIN
pode ser útil para exibir todos os clientes, mesmo aqueles que ainda não realizaram compras. A decisão correta evita perda de informações e melhora a eficiência das consultas em bancos de dados de grande escala.
Algumas aplicações:
- INNER JOIN: Relacionar pedidos e clientes cadastrados
- LEFT JOIN: Listar todos os clientes, mostrando quem já fez pedidos
- RIGHT JOIN: Mostrar todos os pedidos, mesmo sem cliente associado
- FULL OUTER JOIN: Combinar todos os registros, incluindo os sem correspondência
- Geração de relatórios detalhados sobre dados distribuídos
Dicas para quem está começando
- Use
INNER JOIN
quando precisar apenas dos registros com correspondência - Para incluir registros sem correspondência, prefira
LEFT JOIN
ouRIGHT JOIN
- Evite
FULL OUTER JOIN
em grandes volumes de dados sem necessidade - Revise a modelagem dos dados antes de escolher o tipo de JOIN
- Se estiver lidando com muitos valores NULL, reavalie se o JOIN utilizado é o correto
Contribuições de Fernando Albuquerque