0Pricing
SQL Academy · Lección

LEFT/RIGHT JOIN y uniones OUTER

Use LEFT JOIN para conservar las filas sin coincidencia, comprenda las uniones RIGHT y FULL OUTER y detecte datos ausentes con WHERE x IS NULL.

LEFT/RIGHT JOIN y uniones OUTER es una lección gratuita de SQL Academy en CoddyKit. Esta es la lección 3 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.

LEFT JOIN: conservar todas las filas de la izquierda

LEFT JOIN devuelve todas las filas de la tabla izquierda, junto con las columnas coincidentes del lado derecho o NULL cuando no existe ninguna coincidencia.

SELECT u.id, u.email, o.id AS order_id
FROM users u
LEFT JOIN orders o ON o.user_id = u.id;

-- Users without orders still appear, with order_id = NULL.

RIGHT JOIN

Es el reflejo de LEFT JOIN: conserva todas las filas de la derecha. La mayoría de las personas simplemente reescribe las combinaciones RIGHT como LEFT para mejorar la legibilidad:

SELECT u.id, u.email, o.id
FROM orders o
RIGHT JOIN users u ON u.id = o.user_id;

-- Equivalent to LEFT JOIN with sides swapped:
SELECT u.id, u.email, o.id
FROM users u
LEFT JOIN orders o ON o.user_id = u.id;

FULL OUTER JOIN

Conserva las filas de ambos lados. Las columnas sin coincidencia contienen NULL:

SELECT u.email, o.id AS order_id
FROM users u
FULL OUTER JOIN orders o ON o.user_id = u.id;

Buscar coincidencias inexistentes

Un LEFT JOIN con WHERE right.id IS NULL encuentra las filas de la tabla izquierda que no tienen coincidencia a la derecha: el clásico "anti-join":

SELECT u.id, u.email
FROM users u
LEFT JOIN orders o ON o.user_id = u.id
WHERE o.id IS NULL;        -- users who have never placed an order

LEFT JOIN con agregación

Es útil para informes que muestran "0 si no hay coincidencia":

SELECT u.id, u.email, COUNT(o.id) AS order_count
FROM users u
LEFT JOIN orders o ON o.user_id = u.id
GROUP BY u.id, u.email
ORDER BY order_count DESC;

La posición del filtro es importante

Los filtros sobre la tabla derecha en WHERE convierten un LEFT JOIN de nuevo en un INNER JOIN. Colóquelos en ON para conservar el comportamiento de LEFT:

-- Drops users without paid orders entirely:
SELECT u.id, COUNT(o.id)
FROM users u
LEFT JOIN orders o ON o.user_id = u.id
WHERE o.status = 'paid'
GROUP BY u.id;

-- Keeps users with no paid orders:
SELECT u.id, COUNT(o.id)
FROM users u
LEFT JOIN orders o
  ON o.user_id = u.id AND o.status = 'paid'
GROUP BY u.id;

Varios LEFT JOIN

Encadénelos. Cada LEFT conserva las filas situadas a la izquierda de ese operador:

SELECT u.email, o.id, p.name
FROM users u
LEFT JOIN orders o   ON o.user_id = u.id
LEFT JOIN products p ON p.id = o.product_id;

Rendimiento de LEFT JOIN

LEFT JOIN tiene un pequeño coste adicional frente a INNER (el planificador debe conservar las filas sin coincidencia). A menudo es insignificante, pero si no necesita las filas sin coincidencia, INNER JOIN es ligeramente más económico.

Combinación externa y salida NULL

La salida NULL de un LEFT JOIN puede sorprender al código posterior. Use COALESCE para proporcionar valores predeterminados:

SELECT u.email, COALESCE(SUM(o.total), 0) AS revenue
FROM users u
LEFT JOIN orders o ON o.user_id = u.id
GROUP BY u.email;

CROSS JOIN: cuando desea todos los pares

Combina cada fila de A con cada fila de B. Úselo con moderación:

SELECT d.date, u.id
FROM users u
CROSS JOIN generate_series('2024-01-01', '2024-01-07', INTERVAL '1 day') AS d(date);

Patrones de anti-join

Tres formas idiomáticas de encontrar "elementos de la izquierda sin coincidencia":

-- LEFT JOIN ... WHERE IS NULL
SELECT u.* FROM users u
LEFT JOIN orders o ON o.user_id = u.id
WHERE o.id IS NULL;

-- NOT EXISTS (often the planner's favourite)
SELECT u.* FROM users u
WHERE NOT EXISTS (SELECT 1 FROM orders o WHERE o.user_id = u.id);

Resumen

Las combinaciones OUTER conservan las filas sin coincidencia.

  • LEFT = todas las filas de la izquierda y NULL a la derecha cuando no hay coincidencia
  • RIGHT = el reflejo; use LEFT para mejorar la legibilidad
  • FULL OUTER = ambos lados
  • Anti-join = LEFT JOIN ... WHERE right IS NULL

Comprobación rápida

¿Qué tipo de JOIN devuelve los usuarios incluso si NO tienen pedidos?

Preguntas frecuentes

¿La lección «LEFT/RIGHT JOIN y uniones OUTER» es gratis?

Sí — el texto completo de «LEFT/RIGHT JOIN y uniones OUTER» 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 «LEFT/RIGHT JOIN y uniones OUTER»?

Use LEFT JOIN para conservar las filas sin coincidencia, comprenda las uniones RIGHT y FULL OUTER y detecte datos ausentes con WHERE x IS NULL. 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 3 de 4.

¿Cuánto tiempo toma la lección «LEFT/RIGHT JOIN y uniones OUTER»?

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. Por qué existen los JOIN (repaso del modelo relacional)
  2. Mecánica de INNER JOIN
  3. LEFT/RIGHT JOIN y uniones OUTER
  4. Auto-uniones y alias
← Volver a SQL Academy