🔄 OUTER JOIN no SQL

Introdução

O OUTER JOIN é utilizado para retornar registros de duas tabelas, incluindo também aqueles que não possuem correspondência entre elas.

Diferente do INNER JOIN, que retorna somente registros relacionados, o OUTER JOIN mantém informações sem relacionamento.

📌 OUTER JOIN permite visualizar dados completos, mesmo quando não existe correspondência entre tabelas.

Tipos de OUTER JOIN

Tipo Descrição
LEFT OUTER JOIN Mantém todos os registros da tabela esquerda
RIGHT OUTER JOIN Mantém todos os registros da tabela direita
FULL OUTER JOIN Mantém registros das duas tabelas

OUTER JOIN x INNER JOIN

INNER JOIN OUTER JOIN
Apenas registros relacionados Inclui registros sem relação
Não retorna NULL Pode retornar NULL
Mais restritivo Mais abrangente

Exemplo de Tabelas


CLIENTES

+----+----------+

| ID | Nome     |

+----+----------+

| 1  | Ana      |

| 2  | Carlos   |

| 3  | Pedro    |

+----+----------+



PEDIDOS

+----+------------+-------+

| ID | Cliente_ID | Valor |

+----+------------+-------+

| 1  | 1          | 500   |

| 2  | 2          | 700   |

| 3  | 5          | 300   |

+----+------------+-------+
          

LEFT OUTER JOIN

Retorna todos os clientes e seus pedidos quando existirem.


SELECT

c.nome,

p.valor


FROM clientes c


LEFT OUTER JOIN pedidos p

ON c.id = p.cliente_id;
          

Resultado:


Ana      | 500

Carlos   | 700

Pedro    | NULL
          

RIGHT OUTER JOIN

Retorna todos os pedidos e clientes relacionados quando existirem.


SELECT

c.nome,

p.valor


FROM clientes c


RIGHT OUTER JOIN pedidos p

ON c.id = p.cliente_id;
          

Resultado:


Ana      | 500

Carlos   | 700

NULL     | 300
          

FULL OUTER JOIN

Retorna todos os registros das duas tabelas.


SELECT *

FROM clientes

FULL OUTER JOIN pedidos

ON clientes.id = pedidos.cliente_id;
          

FULL OUTER JOIN no MySQL

O MySQL não possui FULL OUTER JOIN nativo.

Podemos simular utilizando UNION entre LEFT JOIN e RIGHT JOIN.


SELECT *

FROM clientes c

LEFT JOIN pedidos p

ON c.id = p.cliente_id


UNION


SELECT *

FROM clientes c

RIGHT JOIN pedidos p

ON c.id = p.cliente_id;
          

Aplicações no Mundo Real

Sistema Utilização
E-commerce Encontrar clientes sem pedidos
Financeiro Comparar lançamentos
RH Comparar funcionários e departamentos
Relatórios Conferência completa de dados

Erros Comuns

Erro Problema
Confundir com INNER JOIN Perda de registros
Não entender NULL Resultados incorretos
Usar sem necessidade Consultas mais pesadas
Relacionamento errado Dados inconsistentes

Boas Práticas

Resumo da Aula

🎓 Aula concluída! Agora você conhece OUTER JOIN e sabe como consultar dados completos entre tabelas relacionadas ou não relacionadas.