CROSS JOIN y productos cartesianos
Use cross joins deliberados para generar combinaciones y evite los accidentales que disparan el número de filas
CROSS JOIN y productos cartesianos es una lección gratuita de Coding Interview Prep en CoddyKit. Esta es la lección 1 de 4. Puedes leer la lección completa abajo gratuitamente — luego la practicas en el navegador con un editor de código integrado y un tutor de IA 24/7. Forma parte de la ruta de aprendizaje de Coding Interview Prep, y tu progreso se sincroniza en la web y la app de CoddyKit. El curso de Coding Interview Prep incluye 4 lecciones en total.
El JOIN que los entrevistadores usan para tenderle una trampa
Un CROSS JOIN empareja cada fila de la tabla izquierda con cada fila de la tabla derecha. No hay ninguna condición ON. Si la tabla A tiene 4 filas y la tabla B tiene 3 filas, el resultado tiene 4 x 3 = 12 filas.
Esto se denomina producto cartesiano. Los entrevistadores preguntan por él por dos motivos: comprobar si puede generar combinaciones deliberadamente y ver si reconoce un CROSS JOIN accidental que hace crecer descontroladamente el conjunto de resultados.
Sintaxis explícita de CROSS JOIN
La forma moderna y legible de escribir un producto cartesiano es usar la palabra clave explícita CROSS JOIN. Observe que no hay ninguna cláusula ON, lo que comunica claramente la intención a quien revisa la consulta.
Aquí combinamos cada talla con cada color para crear una matriz completa de productos.
SELECT s.size, c.color
FROM sizes s
CROSS JOIN colors c;Sintaxis antigua con comas
Seguirá viendo productos cartesianos escritos con una coma en la cláusula FROM y sin ninguna condición de combinación. Esta es la sintaxis heredada de ANSI.
Produce exactamente el mismo resultado que CROSS JOIN, pero es peligrosa: si pretendía añadir una condición de combinación y la olvidó, obtiene silenciosamente un cross join en lugar de un error. Prefiera el CROSS JOIN explícito.
-- Same result as CROSS JOIN, but easy to write by accident
SELECT s.size, c.color
FROM sizes s, colors c;Ejemplo práctico: crear una tabla de tallas
Suponga que una tienda vende camisetas en 3 tallas y 4 colores, y quiere una fila para cada variante posible, incluso para las que todavía no están disponibles. Un cross join genera las 12 combinaciones en un solo paso.
Este es el uso intencionado más habitual: producir una cuadrícula completa de opciones.
SELECT s.size, c.color, 0 AS stock_qty
FROM sizes s
CROSS JOIN colors c
ORDER BY s.size, c.color;Generar una cuadrícula de calendario
Otro uso clásico de CROSS JOIN en entrevistas técnicas: crear una cuadrícula completa para que todas las combinaciones estén presentes, incluso cuando faltan datos.
Aquí combinamos cada tienda con cada fecha para que una posterior LEFT JOIN con las ventas proporcione una fila por tienda y día, rellenando los huecos con ceros. El cross join garantiza que no se omita ningún día de ninguna tienda.
SELECT st.store_id, d.day
FROM stores st
CROSS JOIN calendar d
WHERE d.day BETWEEN DATE '2024-01-01' AND DATE '2024-01-31';Explosión cartesiana accidental
El peligro que suelen explorar los entrevistadores: combina dos tablas, pero olvida la condición de combinación. En lugar de producir un error, la base de datos devuelve tranquilamente todas las combinaciones.
Si orders tiene 100.000 filas y customers tiene 50.000, el resultado contiene 5.000 millones de filas. Las consultas se bloquean, la memoria se agota y las cifras aparecen enormemente infladas. Reconocer este patrón en una revisión de código es una señal muy positiva.
-- BUG: no join condition between the two tables
SELECT o.order_id, c.name
FROM orders o, customers c;
-- returns COUNT(orders) * COUNT(customers) rowsCómo detectar un CROSS JOIN accidental
Síntomas que los entrevistadores esperan que sepa identificar:
- El número de filas es aproximadamente el producto del tamaño de ambas tablas, no la suma.
- Los agregados como
SUMestán inflados por un múltiplo constante. - El plan de ejecución muestra un Nested Loop sin filtro de combinación.
La solución casi siempre consiste en añadir una igualdad ON o WHERE que falta entre las tablas.
CROSS JOIN frente a INNER JOIN con un ON siempre verdadero
Un CROSS JOIN es lógicamente idéntico a un INNER JOIN ... ON 1=1. Ambos producen el producto cartesiano completo.
De hecho, un inner join no es más que un cross join seguido de un filtro basado en la condición ON. Este modelo mental explica por qué la ausencia de una condición convierte un inner join en un cross join.
-- These two queries return identical results
SELECT * FROM a CROSS JOIN b;
SELECT * FROM a INNER JOIN b ON 1 = 1;Combinar con una tabla de números
Un truco muy útil es combinar mediante un cross join con una tabla pequeña de numbers o generate_series para multiplicar filas deliberadamente. Se utiliza para expandir una sola fila en muchas; por ejemplo, para convertir una cantidad en filas correspondientes a unidades individuales.
Aquí cada fila de producto se repite qty veces al combinarla con una serie y conservar los números hasta llegar a la cantidad.
SELECT p.product_id, n.n AS unit_number
FROM products p
CROSS JOIN generate_series(1, 100) AS n(n)
WHERE n.n <= p.qty;Rendimiento y prácticas seguras
Como la salida crece multiplicativamente, nunca combine mediante un cross join dos tablas grandes. Asegúrese de que al menos uno de los lados sea pequeño: una lista de tallas, un calendario reducido o una tabla de números.
En una entrevista, dígalo explícitamente: 'Un CROSS JOIN solo es seguro cuando uno de los lados es pequeño y está acotado; de lo contrario, el resultado es inmanejable.' Esta frase demuestra criterio, no solo conocimiento de la sintaxis.
Cuándo utilizar CROSS JOIN
Utilice deliberadamente un CROSS JOIN cuando necesite todas las combinaciones de dos conjuntos:
- Generar matrices de opciones (talla × color).
- Densificar series temporales (tienda × día) antes de un
LEFT JOIN. - Expandir filas mediante una tabla de números.
Si no quiere todas las combinaciones, casi con toda seguridad necesita un join con una condición ON.
Comprobación rápida
Compruebe su comprensión de los productos cartesianos.
Recapitulación: CROSS JOIN
Ideas clave:
- Un CROSS JOIN combina cada fila de la izquierda con cada fila de la derecha; el tamaño de la salida es el producto de las entradas.
- La sintaxis con comas y sin condición produce el mismo producto cartesiano, a menudo por accidente.
- Utilícelo deliberadamente para crear cuadrículas de combinaciones, densificar series temporales y expandir filas mediante una tabla de números.
- Un inner join al que le falta
ONse convierte silenciosamente en un cross join: el error de explosión que tanto les gusta a los entrevistadores.
Preguntas frecuentes
¿La lección «CROSS JOIN y productos cartesianos» es gratis?
Sí — el texto completo de «CROSS JOIN y productos cartesianos» es gratis para leer aquí en la web. Para practicarla de forma interactiva (editor de código integrado y tutor de IA 24/7) y desbloquear el resto del curso de Coding Interview Prep, actualiza a CoddyKit PRO. El curso de Coding Interview Prep incluye 4 lecciones en total.
¿Qué aprenderé en «CROSS JOIN y productos cartesianos»?
Use cross joins deliberados para generar combinaciones y evite los accidentales que disparan el número de filas Practicas Coding Interview Prep con código real que ejecutas directamente en el navegador, y un tutor de IA 24/7 responde tus preguntas mientras trabajas en la lección.
¿Necesito experiencia previa para empezar Coding Interview Prep?
No se requiere experiencia previa. Coding Interview Prep en CoddyKit está estructurado para principiantes hasta estudiantes avanzados, así que puedes empezar aquí o desde el inicio y avanzar a tu ritmo. Esta es la lección 1 de 4.
¿Cuánto tiempo toma la lección «CROSS JOIN y productos cartesianos»?
La mayoría de las lecciones de CoddyKit toman alrededor de 5–10 minutos. Cada una es compacta e interactiva, así que avanzas constantemente y retomas exactamente por donde dejaste en la web y la app.
¿Puedo escribir y ejecutar código en esta lección de Coding Interview Prep?
Sí. Cada lección de Coding Interview Prep incluye un editor de código integrado, así que escribes y ejecutas código real directamente en tu navegador y obtienes retroalimentación instantánea de IA — sin configuración local necesaria.
Todas las lecciones de este curso
- CROSS JOIN y productos cartesianos
- SELF JOIN para jerarquías
- Comparar filas dentro de una tabla
- Elegir el tipo de join adecuado