🙏 Realmente necesitamos su apoyo. Necesitamos financiamiento para continuar nuestra misión: publicar nuevas lecciones y mejorar la plataforma. Si puede, por favor apoye el proyecto con una donación. Ayude al proyecto ahora →
Código SQL copiado al portapapeles

Lección 5.4: RIGHT JOIN - Incluyendo Todos los Registros de la Tabla Derecha

El RIGHT JOIN (o RIGHT OUTER JOIN) es el opuesto lógico del LEFT JOIN. Asegura que todas las filas de la tabla "derecha" (la que se menciona después de la palabra clave JOIN) se incluyan en el conjunto de resultados, independientemente de si tienen una coincidencia en la tabla "izquierda".

¿Qué es un RIGHT JOIN?

Un RIGHT JOIN devuelve todas las filas de la tabla derecha y las filas coincidentes de la tabla izquierda. Si no hay coincidencia en la tabla izquierda, el resultado contendrá valores NULL para las columnas de la tabla izquierda.

Visualización:

   Tabla A (cliente)           Tabla B (pago)
   +----+----------+            +----+----------+
   | id | nombre   |            | id | monto    |
   +----+----------+            +----+----------+
   | 1  | Alice    | <--------> | 1  | 10.00    | (¡Coincidencia!)
   | NULL          | <--------> | 4  | 50.00    | (Sin coincidencia, ¡mantiene el Pago 4!)
   +----+----------+            +----+----------+

En este ejemplo, el pago con ID 4 se mantiene incluso si no hay un cliente asociado (aunque en una base de datos bien diseñada como Sakila, esto es raro debido a las restricciones de clave foránea).

Sintaxis de RIGHT JOIN

La sintaxis sigue el mismo patrón que otros joins:

SELECT
    table1.column1,
    table2.column2
FROM
    table1
RIGHT JOIN
    table2 ON table1.common_column = table2.common_column;
  • RIGHT JOIN: Asegura que todas las filas de table2 (la tabla derecha) se mantengan.
  • ON: Especifica la condición de unión.

Ejemplos Prácticos (Base de Datos Sakila)

Aunque el RIGHT JOIN es menos común en la práctica que el LEFT JOIN (porque cualquier RIGHT JOIN puede reescribirse como un LEFT JOIN intercambiando el orden de las tablas), sigue siendo importante entenderlo.

1. Listando Todas las Direcciones y su Personal

Supongamos que queremos ver todas las direcciones en nuestro sistema y verificar si hay algún miembro del personal actualmente asignado a ellas.

SELECT
    s.first_name,
    s.last_name,
    a.address
FROM
    staff AS s
RIGHT JOIN
    address AS a ON s.address_id = a.address_id
ORDER BY
    s.last_name;

Esto devolverá todas las direcciones de la tabla address. Si una dirección no tiene un miembro del personal, los nombres serán NULL.

RIGHT JOIN vs. LEFT JOIN

Cada RIGHT JOIN puede expresarse como un LEFT JOIN. La mayoría de los desarrolladores de SQL prefieren usar exclusivamente LEFT JOIN y simplemente reordenar las tablas para mantener la tabla "principal" a la izquierda. Esto generalmente hace que la consulta sea más fácil de leer de arriba hacia abajo.

Ejemplo de equivalencia:

-- Usando RIGHT JOIN
SELECT f.title, i.inventory_id
FROM film f
RIGHT JOIN inventory i ON f.film_id = i.film_id;

-- Usando LEFT JOIN (mismo resultado)
SELECT f.title, i.inventory_id
FROM inventory i
LEFT JOIN film f ON i.film_id = f.film_id;

Conclusiones Clave de Esta Lección

  • RIGHT JOIN devuelve todas las filas de la tabla derecha.
  • Es la imagen espejo del LEFT JOIN.
  • Las columnas de la tabla izquierda contendrán NULL donde no se encuentre coincidencia.
  • La mayoría de los desarrolladores prefieren LEFT JOIN por consistencia, pero entender ambos es esencial para leer código existente.