Relaciones · guía rápida

CROSS JOIN

Combina cada fila de una tabla con todas las filas de otra. Es útil para generar combinaciones, pero puede multiplicar el resultado muy rápido.

Lectura: 6–8 minEjemplo paso a pasoPráctica con pistas
Contenido de esta guía

Qué significa

CROSS JOIN genera el producto cartesiano de dos conjuntos: combina cada fila de la tabla izquierda con cada fila de la tabla derecha. Si una tabla aporta 2 filas y la otra 3, el resultado contiene 6 combinaciones.

Cuándo resulta útil

Se utiliza cuando necesitas todas las combinaciones posibles: por ejemplo, preparar una cuadrícula de productos y periodos, generar opciones de talla y color o construir un conjunto de escenarios para una comprobación. Debe ser una decisión explícita. En consultas habituales, un producto cartesiano accidental suele indicar que falta una condición de unión.

Regla rápida: antes de ejecutar, multiplica las filas de ambos lados. Esa cuenta te permite anticipar el tamaño del resultado.

Sintaxis básica

Estructura
SELECT columnas
FROM tabla_a
CROSS JOIN tabla_b;

CROSS JOIN no necesita una condición ON: precisamente pide todas las combinaciones. Puedes filtrar después con WHERE, aunque conviene reducir los datos antes cuando las tablas son grandes.

Ejemplo guiado

Clientes utilizados
idnombre
1Ana Torres
2Luis Martín
Productos utilizados
idnombre
1Ratón
2Teclado

Queremos preparar una propuesta que combine cada uno de esos clientes con cada producto:

SQL
SELECT c.nombre AS cliente,
       p.nombre AS producto
FROM clientes AS c
CROSS JOIN productos AS p
WHERE c.id IN (1, 2)
  AND p.id IN (1, 2)
ORDER BY c.id, p.id;
Resultado esperado: 2 × 2 = 4 filas
clienteproducto
Ana TorresRatón
Ana TorresTeclado
Luis MartínRatón
Luis MartínTeclado

Cómo leer el resultado

  1. La primera fila de clientes se combina con las dos filas de productos.
  2. La segunda fila de clientes vuelve a combinarse con esos dos productos.
  3. El WHERE limita el ejemplo a dos clientes y dos productos.
  4. ORDER BY solo organiza la salida; no cambia las combinaciones creadas.

Error frecuente

Crear un producto cartesiano sin querer

Consulta problemática
SELECT c.nombre, p.id
FROM clientes AS c, pedidos AS p;

La coma entre tablas sin una condición puede combinar cada cliente con cada pedido. Si buscabas relacionarlos mediante cliente_id, utiliza un JOIN ... ON. Reserva CROSS JOIN para los casos en los que todas las combinaciones son realmente el objetivo.

Comprueba lo aprendido

Básica · apoyo gradual

Genera una cuadrícula pequeña

Combina las categorías con id 1 y 2 con los productos con id 1 y 2. Devuelve categoria y producto, y ordena por los identificadores de ambas tablas.

Compatibilidad y rendimiento

CROSS JOIN está ampliamente soportado. La idea del producto cartesiano es común, pero algunos motores aplican reglas particulares de optimización. En SQLite, por ejemplo, escribir explícitamente CROSS JOIN también puede limitar la reordenación de tablas por el optimizador. No uses ese detalle como técnica de rendimiento sin medir y consultar la documentación del motor.

Qué debes recordar

  • Combina cada fila de un lado con todas las del otro.
  • El número de filas crece como una multiplicación.
  • Si no querías todas las combinaciones, probablemente falta una condición ON.

Conceptos relacionados

Fuentes técnicas consultadas

Se utilizaron para comprobar la semántica y los matices entre motores. La explicación y los ejemplos son originales.