PostgreSQL
 sql >> Base de Dados >  >> RDS >> PostgreSQL

A ordem das tabelas em uma junção é importante quando as junções LEFT (externas) são usadas?


É o mesmo, mas é ambíguo como o inferno com o implícito CROSS JOIN. Use JOINS explícitos.

Se você estiver participando da cláusula WHERE, os resultados podem diferem porque as junções e os filtros estão misturados.
SELECT ....
  FROM apples a
       JOIN
       bananas b ON ...
       JOIN 
       oranges o ON ...
       LEFT JOIN
       kiwis k ON k.orange_id = o.id
 WHERE (filters only)

Notas:
  • INNER JOINS e CROSS JOINS são comutativos e associativos:a ordem geralmente não importa.
  • OUTER JOINS não são, o que você identificou
  • SQL é declarativo:você diz ao otimizador o que deseja, não como fazê-lo. Isso remove as considerações do pedido JOIN (sujeito aos 2 itens anteriores)