CROSS JOIN y productos cartesianos
Use CROSS JOIN deliberadamente para crear combinaciones y evite explosiones cartesianas accidentales debidas a claves de unión ausentes.
CROSS JOIN y productos cartesianos es una lección gratuita de SQL Academy 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 SQL Academy, y tu progreso se sincroniza en la web y la app de CoddyKit. El curso de SQL Academy incluye 4 lecciones en total.
¿Qué es un CROSS JOIN?
Un CROSS JOIN produce todas las combinaciones de filas: m × n filas de salida. No tiene cláusula ON.
SELECT * FROM a CROSS JOIN b;
-- Equivalent:
SELECT * FROM a, b; -- comma join, no conditionProductos cartesianos accidentales
El error clásico: olvidar la condición del JOIN y obtener cada fila de A emparejada con cada fila de B.
SELECT u.email, o.id
FROM users u, orders o; -- missing WHERE u.id = o.user_id !
-- m users × n orders rows — millions!Casos de uso intencionados
CROSS JOIN resulta útil cuando realmente desea obtener todos los pares:
- Combinaciones de categorías × periodos de tiempo para informes con intervalos vacíos
- Datos de prueba: cada usuario × cada producto
- Calendarios: cada tienda × cada fecha
Ejemplo de calendario × tiendas
Rellene con ceros los días sin actividad de cada tienda:
SELECT d.day, s.id, COALESCE(SUM(o.total), 0) AS revenue
FROM generate_series(CURRENT_DATE - 30, CURRENT_DATE, '1 day') AS d(day)
CROSS JOIN stores s
LEFT JOIN orders o ON o.store_id = s.id
AND date_trunc('day', o.created_at) = d.day
GROUP BY d.day, s.id
ORDER BY d.day, s.id;Productos cartesianos y EXPLAIN
Un producto cartesiano no intencionado aparece como un número enorme de filas en EXPLAIN ANALYZE:
EXPLAIN ANALYZE
SELECT u.email, o.id FROM users u, orders o;
-- Nested Loop (rows=10000000) ← warning signLATERAL: CROSS JOIN condicional
LATERAL JOIN es como un CROSS JOIN en el que el lado derecho puede hacer referencia al izquierdo; se explica en la siguiente lección.
Permutaciones y combinaciones
Para obtener pares (A,B) sin duplicados, añada una comparación en ON:
SELECT a.id, b.id
FROM products a
JOIN products b ON a.id < b.id;
-- All unique pairs of products, no (A,A), no (B,A) duplicates of (A,B)CROSS JOIN con VALUES
Incluya un conjunto pequeño en línea:
SELECT u.email, c.code
FROM users u
CROSS JOIN (VALUES ('EUR'), ('USD'), ('GBP')) AS c(code);Evitar la sintaxis de unión con comas
La unión implícita con comas (FROM a, b) es válida, pero oculta la intención. Es preferible utilizar CROSS JOIN explícito:
-- Don't (looks like a typo):
FROM users, orders
-- Do:
FROM users CROSS JOIN ordersRendimiento
CROSS JOIN en sí es barato: no hay ninguna condición que evaluar. El coste está en el número de filas de salida: 10k × 10k = 100M filas.
Resumen
CROSS JOIN = todos los pares.
- Utilícelo deliberadamente para crear combinaciones
- Esté atento a los productos cartesianos accidentales (falta WHERE)
- Combínelo con generate_series para completar intervalos en los informes
Comprobación rápida
Ha escrito SELECT * FROM users u, orders o; sin WHERE. ¿Cuál es el resultado?
Aprende SQL con un tutor de IA — gratis
Escribe y ejecuta código real en tu navegador, obtén ayuda instantánea de un tutor de IA disponible 24/7 y continúa donde lo dejaste en la web o en la aplicación.
- Cursos
- 46
- Lecciones
- 183
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 SQL Academy, actualiza a CoddyKit PRO. El curso de SQL Academy incluye 4 lecciones en total.
¿Qué aprenderé en «CROSS JOIN y productos cartesianos»?
Use CROSS JOIN deliberadamente para crear combinaciones y evite explosiones cartesianas accidentales debidas a claves de unión ausentes. Practicas SQL Academy 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 SQL Academy?
No se requiere experiencia previa. SQL Academy 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 SQL Academy?
Sí. Cada lección de SQL Academy 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
- Uniones laterales (LATERAL JOIN)
- Anti-uniones y semi-uniones (NOT EXISTS)
- Optimización del rendimiento de uniones entre varias tablas