🙏 Realmente necesitamos su apoyo. Necesitamos financiamiento para continuar nuestra misión: publicar nuevas lecciones y mejorar la plataforma. Si puede, por favor apoye el proyecto con una donación. Ayude al proyecto ahora →
Código SQL copiado al portapapeles

Lección 5.6: CROSS JOIN - El Producto Cartesiano

Mientras que la mayoría de los joins requieren una condición de coincidencia específica (la cláusula ON), un CROSS JOIN es diferente. Devuelve todas las combinaciones posibles de filas de las tablas unidas. Este resultado se conoce matemáticamente como un Producto Cartesiano.

¿Qué es un CROSS JOIN?

Un CROSS JOIN produce un conjunto de resultados donde el número de filas es el resultado de multiplicar el número de filas en la primera tabla por el número de filas en la segunda tabla. No se utiliza ninguna condición para hacer coincidir las filas; cada fila en la Tabla A simplemente se combina con cada fila en la Tabla B.

Visualización:

   Tabla A (Colores)             Tabla B (Tamaños)
   +-----------+                +-----------+
   | color     |                | tamaño     |
   +-----------+                +-----------+
   | Rojo      |  --\           | Pequeño    |
   | Azul      |  ---|------>   | Mediano    |
   +-----------+  --/           | Grande     |
                                +-----------+

   Resultado (Combinaciones):
   Rojo, Pequeño
   Rojo, Mediano
   Rojo, Grande
   Azul, Pequeño
   Azul, Mediano
   Azul, Grande

Si la Tabla A tiene 2 filas y la Tabla B tiene 3 filas, el resultado tendrá 2 x 3 = 6 filas.

Sintaxis de CROSS JOIN

Hay dos formas de escribir un producto cartesiano:

-- Sintaxis explícita
SELECT
    table1.column,
    table2.column
FROM
    table1
CROSS JOIN
    table2;

-- Sintaxis implícita con coma
SELECT
    table1.column,
    table2.column
FROM
    table1,
    table2;

Es importante entender que estas formas difieren no solo en estilo, sino también en la precedencia de los operadores.

  • Un JOIN explícito tiene mayor precedencia y se procesa en la misma secuencia que otras cláusulas JOIN en el texto de la consulta.
  • La sintaxis con coma tiene menor precedencia y se procesa efectivamente solo después de los JOIN explícitos.

Debido a esto, mezclar joins con coma y JOIN explícitos en la misma cláusula FROM puede cambiar el significado de la consulta o incluso llevar a un error.

Por ejemplo, la siguiente consulta es inválida:

FROM a, b JOIN c ON (a.x = c.y AND b.z = c.t)

Por qué esto es un error:

  • primero, el b JOIN c explícito se procesa;
  • en ese momento, la tabla a aún no está en el ámbito para esa expresión de join;
  • por lo tanto, la referencia a a.x dentro de la cláusula ON es inválida.

Es por eso que el CROSS JOIN explícito suele ser preferible: no solo porque se ve más claro, sino porque se ajusta mejor a otros JOIN y evita problemas ocultos de precedencia.

Advertencia: Ten mucho cuidado al usar CROSS JOIN en tablas grandes. Unir dos tablas con 1,000 filas cada una producirá 1,000,000 filas!

Ejemplos Prácticos (Base de Datos Sakila)

1. Generando Todas las Combinaciones Posibles

Imagina que queremos crear un informe o una cuadrícula que muestre cada categoría de película para cada tienda, incluso si esa tienda no tiene películas en esa categoría.

SELECT
    s.store_id,
    c.name AS category_name
FROM
    store AS s
CROSS JOIN
    category AS c;

Esto produce una lista de todas las categorías para la Tienda 1, seguida de todas las categorías para la Tienda 2.

2. Creando Datos de Prueba o Matrices

El CROSS JOIN se utiliza a menudo para generar grandes conjuntos de permutaciones para pruebas o para construir calendarios/horarios donde necesitas ver todos los intervalos de tiempo contra todos los usuarios.

Cuándo Usar CROSS JOIN

  • Generando Permutaciones: Cuando necesitas una lista de cada combinación posible (por ejemplo, todos los colores de productos frente a todos los tamaños de productos).
  • Llenando Vacíos: Cuando se utiliza con LEFT JOIN, puede ayudar a identificar combinaciones faltantes en tus datos.
  • Informes: Para crear el "esqueleto" de un informe que debe incluir todas las categorías, incluso aquellas con valores cero.

Conclusiones Clave de Esta Lección

  • CROSS JOIN devuelve el Producto Cartesiano de dos tablas.
  • No utiliza una cláusula ON (sin condición de coincidencia).
  • El número de filas en el resultado es el producto de los conteos de filas de ambas tablas.
  • Úsalo con precaución en conjuntos de datos grandes para evitar problemas de rendimiento.