SQL RIGHT JOIN: conservar todas las filas de la tabla derecha
Lección 5.4 · Tiempo de lectura: ~4 min
SQL RIGHT JOIN devuelve cada fila de la tabla derecha y las filas coincidentes de la tabla izquierda; donde no hay coincidencia, las columnas de la tabla izquierda son NULL. En esta lección aprenderás la sintaxis de RIGHT JOIN, cómo refleja a LEFT JOIN y por qué la mayoría de los desarrolladores lo reescriben como LEFT JOIN.
RIGHT JOIN es la imagen espejo de LEFT JOIN. La única diferencia es qué tabla conserva todas sus filas: con LEFT JOIN es la tabla que va después de FROM; con RIGHT JOIN, la que va después de JOIN.
Qué devuelve RIGHT JOIN
- Cada fila de la tabla derecha (la que va después de
RIGHT JOIN) aparece en el resultado. - Las filas con coincidencias se combinan con ellas, como en
INNER JOIN. - Las filas sin coincidencia reciben
NULLen todas las columnas de la tabla izquierda.
RIGHT JOIN y RIGHT OUTER JOIN son lo mismo.
Sintaxis básica
SELECT left_table.column1, right_table.column2
FROM left_table
RIGHT JOIN right_table ON left_table.key_column = right_table.key_column;
Ejemplo: todas las direcciones y sus empleados
La tabla address guarda las direcciones de clientes, empleados y tiendas. Para listar todas las direcciones y mostrar cuáles pertenecen a empleados:
SELECT s.first_name, s.last_name, a.address, a.district
FROM staff AS s
RIGHT JOIN address AS a ON s.address_id = a.address_id
ORDER BY s.staff_id IS NULL, a.address
LIMIT 10;
Resultado: las 603 direcciones; primero las dos direcciones de los empleados con sus nombres, el resto con NULL en first_name y last_name.
RIGHT JOIN como LEFT JOIN
Cualquier RIGHT JOIN se puede reescribir como LEFT JOIN intercambiando las tablas. Estas dos consultas devuelven las mismas filas:
-- RIGHT JOIN: se conservan todas las direcciones
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;
-- LEFT JOIN con las tablas intercambiadas: el mismo resultado
SELECT s.first_name, s.last_name, a.address
FROM address AS a
LEFT JOIN staff AS s ON s.address_id = a.address_id;
Resultado: ambas consultas devuelven 603 filas.
La mayoría de los desarrolladores usa solo LEFT JOIN. Así la consulta se lee de forma natural: la tabla principal va primero después de FROM, y cada join siguiente solo le agrega información. Mezclar LEFT y RIGHT en una consulta hace difícil ver qué filas tienen garantizado quedarse.
Cuándo es útil RIGHT JOIN
- Leer código existente. Encontrarás
RIGHT JOINen consultas de otras personas y en consultas generadas por herramientas. - Agregar una tabla al final de una consulta larga. A veces es más simple agregar un
RIGHT JOINque reordenar una larga cadena de joins. Aun así, reescribir la consulta conLEFT JOINsuele hacerla más clara.
SQLite agregó RIGHT JOIN recién en la versión 3.39 (2022); en versiones anteriores, usa LEFT JOIN con las tablas intercambiadas.
Conclusiones clave:
RIGHT JOINconserva cada fila de la tabla derecha; las filas sin coincidencia recibenNULLen las columnas de la izquierda.A RIGHT JOIN Bdevuelve las mismas filas queB LEFT JOIN A.- La mayoría de las consultas usan
LEFT JOINcon la tabla principal después deFROM: es más fácil de leer. - Evita mezclar
LEFT JOINyRIGHT JOINen una misma consulta.
Preguntas frecuentes
¿Cuál es la diferencia entre LEFT JOIN y RIGHT JOIN?
LEFT JOIN conserva todas las filas de la tabla que va después de FROM; RIGHT JOIN conserva todas las filas de la tabla que va después de JOIN. Intercambiar las tablas convierte uno en el otro.
¿Por qué los desarrolladores casi no usan RIGHT JOIN?
Porque un LEFT JOIN con las tablas intercambiadas da el mismo resultado y se lee de forma más natural: la tabla principal va primero, y las tablas unidas le agregan detalles.
¿RIGHT JOIN es lo mismo que RIGHT OUTER JOIN?
Sí. La palabra clave OUTER es opcional.