2
respostas

Distinção entre os JOINS

Bom dia. Na revisão sobre as diferenças entre o INNER, RIGHT, LEFT e FULL JOIN, há consultas que dão o mesmo resultado.

Em um exemplo de FULL JOIN, se eu mudar para o INNER, RIGHT e LEFT JOIN, a consulta dá o mesmo resultado. Por que será?

Ex: SELECT DISTINCT c.Nome, p.IDCliente FROM Clientes c FULL JOIN Pedidos p ON c.ID = p.IDCliente;

Aguardo a resposta.

Atenciosamente,

Arthur

2 respostas

Olá, Arthur! Tudo bem?

A consulta com FULL JOIN retorna os mesmos resultados que LEFT JOIN, RIGHT JOIN ou até INNER JOIN porque,neste caso específico, os dados das tabelas Clientes e Pedidos estão todos relacionados de forma completa. Ou seja:

  • Todos os clientes têm pelo menos um pedido (não há clientes “órfãos”);
  • Todos os pedidos têm um cliente associado (não há pedidos “órfãos”).

Quando não há registros soltos de um lado ou de outro, qualquer tipo de JOIN acaba trazendo só os pares que combinam. Por isso, o resultado pode ser o mesmo.

Mas isso não significa que os JOINs são equivalentes. Eles têm comportamentos diferentes que só aparecem quando os dados estão incompletos. Por exemplo:

  • Se houver um cliente sem pedido, ele só aparece no LEFT JOIN ou FULL JOIN.
  • Se houver um pedido sem cliente, ele só aparece no RIGHT JOIN ou FULL JOIN.
  • O INNER JOIN ignora todos esses casos e mostra apenas os registros com correspondência dos dois lados.

Espero ter ajudado.

Qualquer dúvida que surgir, compartilhe no fórum. Abraços e bons estudos!

Caso este post tenha lhe ajudado, por favor, marcar como solucionado ✓. Bons Estudos!

Isso não é uma explicação, é uma aula (risos). Muito obrigado, Monalisa.