SQL: FULL OUTER JOIN 🔗

🔍 Cláusula FULL OUTER JOIN

O FULL OUTER JOIN é uma operação SQL usada para combinar registros de duas tabelas. Diferente de outros tipos de junção como LEFT JOIN, RIGHT JOIN e INNER JOIN, o FULL OUTER JOIN retorna todos os registros de ambas as tabelas, independentemente de haver correspondência. Caso não haja correspondência, os campos da tabela que não possuem dados serão preenchidos com NULL.


 

🎯 Utilidade do FULL OUTER JOIN

O FULL OUTER JOIN é muito útil quando é necessário combinar todos os registros de duas tabelas, incluindo tanto os dados que têm correspondência quanto os que não têm. Ele é amplamente utilizado em relatórios e análises, garantindo uma visão completa dos dados de ambas as tabelas, sem excluir informações parciais ou incompletas.


 

📝 Exemplo de Uso

Vamos considerar as tabelas D2D_Customers e D2D_Orders, que compartilham a coluna Customer_id. A consulta abaixo demonstra o uso do FULL OUTER JOIN:

SELECT
 [Fields]
FROM
 D2D_Customers D1
  FULL OUTER JOIN D2D_Orders D2
   ON D1.Customer_id= D2.Customer_id

🔹 Explicação:

  • Retorna todos os registros das duas tabelas.

  • Se um cliente não tiver um pedido, os campos da tabela D2D_Orders serão preenchidos com NULL.

  • Se houver um pedido sem um cliente associado, os campos da tabela D2D_Customers serão preenchidos com NULL.


 

📊 Representação Gráfica

No diagrama de Venn, o FULL OUTER JOIN representa todas as áreas de ambas as tabelas, incluindo os registros exclusivos de cada uma delas:

 

 
 
 
 
 
D2D_Customers
D2D_Orders

🔹 Azul: Registros comuns entre as tabelas.

🔹 Branco: Registros sem correspondência em uma das tabelas.


 

📌 Resultados da Consulta

✅ Caso 1: Correspondência Encontrada

Se um registro da tabela D2D_Customers encontrar correspondência pelo campo Customer_id na tabela D2D_Orders, os dados de ambas as tabelas serão combinados e exibidos.

⚠️ Caso 2: Sem Correspondência em D2D_Orders

Se um cliente não tiver pedidos, ele ainda será retornado, mas os campos da tabela D2D_Orders serão preenchidos com NULL.

⚠️ Caso 3: Sem Correspondência em D2D_Customers

Se um pedido não estiver associado a um cliente, ele também será retornado, mas os campos da tabela D2D_Customers serão preenchidos com NULL.


 

🛠️ Eliminando Registros sem Correspondência

Uma consulta com FULL OUTER JOIN pode ser ajustada para exibir apenas registros sem correspondência. Isso pode ser feito com a cláusula WHERE, verificando se Customer_id é NULL em qualquer uma das tabelas:

SELECT
 [Fields]
FROM
 D2D_Customers D1
  FULL OUTER JOIN D2D_Orders D2
   ON D1.Customer_id= D2.Customer_id
WHERE
 D1.Customer_id IS NULL OR D2.Customer_id IS NULL;

🔹 Explicação:

  • Retorna apenas os registros que não têm correspondência entre as tabelas.

  • Clientes sem pedidos e pedidos sem clientes serão incluídos no resultado.

📊 Representação Gráfica

Nesta consulta, a representação no diagrama de Venn corresponde às áreas exclusivas das tabelas, excluindo a interseção:

Representação Gráfica 

 
 
 
 
 
D2D_Customers
D2D_Orders

 


 

🔗 Relacionamentos 1:1 e 1:N

Assim como em outras junções, ao trabalhar com o FULL OUTER JOIN, é importante entender os tipos de relacionamento entre as tabelas:

🔹 Relacionamento 1:1 (Um para Um)

Cada registro de uma tabela tem, no máximo, um registro correspondente na outra tabela.

🔹 Relacionamento 1:N (Um para Muitos)

Um registro de uma tabela pode ter vários registros correspondentes na outra tabela, resultando em múltiplas linhas no resultado da consulta.


 

💡 Conclusão:

  • O FULL OUTER JOIN é uma ferramenta poderosa para garantir que todos os dados sejam considerados, mesmo que não haja correspondência entre as tabelas.

  • É amplamente utilizado em relatórios, auditorias e análises de dados onde é necessário capturar informações completas de ambas as tabelas.

  • Quando necessário, pode-se filtrar somente os registros sem correspondência para identificação de dados incompletos.

Data de Publicação: 04-09-2024

Categoria: SQL