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

Por que as condições CROSS JOIN não funcionam na cláusula 'ON', apenas na cláusula WHERE?


CROSS JOIN é o operador SQL para realizar um produto cartesiano completo entre duas tabelas. Por ser um produto cartesiano, não permite nenhuma condição durante a operação , você só pode restringir seu resultado com alguma operação de filtragem (a condição WHERE).

Os operadores JOIN (INNER e OUTER JOIN, ou seja), são simplesmente produto cartesiano junto com o operador de filtragem expresso na parte ON do operador (e de fato na sintaxe original do SQL não havia operador JOIN, simplesmente a “vírgula” notação para denotar o produto com a condição de junção expressa sempre na parte WHERE).

Exemplos:

notação "antiga":
SELECT ...
FROM table1 t1, table2 t2
WHERE t1.attribute = t2.attribute

equivalente à notação "moderna":
SELECT ...
FROM table1 t1 INNER JOIN table2 t2 ON t1.attribute = t2.attribute

enquanto, para o produto cartesiano:

notação "antiga":
SELECT ...
FROM table1 t1, table2 t2

equivalente à notação "moderna":
SELECT ...
FROM table1 t1 CROSS JOIN table2 t2

Em outras palavras, um CROSS JOIN que requer uma condição é na verdade algum tipo de INNER JOIN.