sql >> Base de Datos >  >> RDS >> PostgreSQL

¿Por qué las condiciones CROSS JOIN no funcionan en la cláusula 'ON', solo en la cláusula WHERE?

CROSS JOIN es el operador SQL para realizar un producto cartesiano completo entre dos tablas. Al ser un producto cartesiano, no permite ninguna condición durante la operación , solo puede restringir su resultado con alguna operación de filtrado (la condición WHERE).

Los operadores JOIN (INNER y OUTER JOIN, es decir), son simplemente producto cartesiano junto con el operador de filtrado expresado en la parte ON del operador (y de hecho en la sintaxis original de SQL no había operador JOIN, simplemente la “coma” notación para denotar el producto con la condición de unión expresada siempre en la parte DONDE).

Ejemplos:

notación "antigua":

SELECT ...
FROM table1 t1, table2 t2
WHERE t1.attribute = t2.attribute

equivalente a la notación "moderna":

SELECT ...
FROM table1 t1 INNER JOIN table2 t2 ON t1.attribute = t2.attribute

mientras que, para el producto cartesiano:

notación "antigua":

SELECT ...
FROM table1 t1, table2 t2

equivalente a la notación "moderna":

SELECT ...
FROM table1 t1 CROSS JOIN table2 t2

En otras palabras, una UNIÓN CRUZADA que requiere una condición es en realidad algún tipo de UNIÓN INTERNA.