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.