SQL Academy · Lección

CROSS JOIN y productos cartesianos

Use CROSS JOIN deliberadamente para crear combinaciones y evite explosiones cartesianas accidentales debidas a claves de unión ausentes.

Lección 1 de 412 pasos

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 condition

Productos 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 sign

LATERAL: 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 orders

Rendimiento

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?

Gratis para empezar

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

  1. CROSS JOIN y productos cartesianos
  2. Uniones laterales (LATERAL JOIN)
  3. Anti-uniones y semi-uniones (NOT EXISTS)
  4. Optimización del rendimiento de uniones entre varias tablas
← Volver a SQL Academy