Vamos a empezar con la definición. RIGHT JOIN es un tipo de unión que devuelve todas las filas de la tabla derecha (por eso se llama "derecha"), y solo las filas coincidentes de la tabla izquierda. Si en la tabla izquierda no hay datos que correspondan a una fila de la tabla derecha, se devolverán valores NULL para las columnas de la tabla izquierda.
Ya conoces LEFT JOIN, esto es casi lo mismo, pero "al revés". La diferencia principal es cuál tabla se considera principal: la izquierda o la derecha.
Sintaxis de RIGHT JOIN
La sintaxis de RIGHT JOIN es prácticamente igual a la de LEFT JOIN. Así es su estructura:
SELECT
columnas
FROM
tabla_izquierda RIGHT JOIN tabla_derecha
ON
condicion_union;
Fíjate en el orden de las tablas:
- tabla izquierda se escribe antes de
RIGHT JOIN; - tabla derecha va después de la palabra
RIGHT JOIN.
Imagina que tenemos dos tablas:
students — lista de estudiantes:
| student_id | name |
|---|---|
| 1 | Otto |
| 2 | Maria |
| 3 | Alex |
enrollments — registros de inscripción de estudiantes en cursos:
| enrollment_id | course_name | student_id |
|---|---|---|
| 101 | Matemáticas | 1 |
| 102 | Informática | 2 |
| 103 | Biología | NULL |
Ahora queremos obtener una lista de todos los registros de inscripción, y también información sobre los estudiantes si existen. Si el estudiante no se encuentra, veremos NULL en vez de la info del estudiante.
La consulta usando RIGHT JOIN se verá así:
SELECT
enrollments.enrollment_id,
enrollments.course_name,
students.name AS student_name
FROM
students RIGHT JOIN enrollments
ON
students.student_id = enrollments.student_id;
Resultado:
| enrollment_id | course_name | student_name |
|---|---|---|
| 101 | Matemáticas | Otto |
| 102 | Informática | Maria |
| 103 | Biología | NULL |
Aquí vemos que todos los registros de la tabla enrollments (tabla derecha) aparecen en el resultado, incluso si no hay coincidencias en la tabla students (tabla izquierda).
Comparación entre RIGHT JOIN y LEFT JOIN
Si ya entiendes cómo funciona LEFT JOIN, puedes pensar: "¿Y para qué sirve RIGHT JOIN? ¿Por qué no usar LEFT JOIN?" ¡Buena pregunta! Vamos a ver las diferencias y cuándo elegir RIGHT JOIN.
Dirección de los datos
LEFT JOIN: devuelve todas las filas de la tabla izquierda, sin importar si hay coincidencias en la tabla derecha.RIGHT JOIN: devuelve todas las filas de la tabla derecha, aunque no haya coincidencias en la tabla izquierda.
Elegir la tabla principal Normalmente eliges
LEFToRIGHTsegún cuál tabla (izquierda o derecha) es más importante para ti y en qué orden te resulta más cómodo escribir la consulta.Equivalencia Cualquier
RIGHT JOINse puede reescribir comoLEFT JOINcambiando el orden de las tablas. Por ejemplo:-- RIGHT JOIN SELECT * FROM students RIGHT JOIN enrollments ON students.student_id = enrollments.student_id; -- LEFT JOIN equivalente SELECT * FROM enrollments LEFT JOIN students ON students.student_id = enrollments.student_id;
Así que, si no eres fan de la palabra RIGHT JOIN, ¡siempre puedes evitarla!
¿Cuándo usar RIGHT JOIN?
En la práctica, RIGHT JOIN se usa menos que LEFT JOIN. Pero hay situaciones donde puede ser útil:
- Si la tabla derecha es más importante (por ejemplo, es tu tabla principal);
- Cuando quieres organizar la consulta en un orden donde la tabla derecha va lógicamente después de la izquierda;
- Si trabajas con código ya escrito que usa
RIGHT JOINpor defecto.
Representación visual de RIGHT JOIN
Para entender mejor RIGHT JOIN, vamos a mirar un esquema:
Tabla izquierda Tabla derecha
[ A ] --------> [ 1 ]
[ B ] --------> [ 2 ]
[ C ] --------> [ 3 ]
[ D ] [ 4 ]
Al usar RIGHT JOIN obtenemos todos los valores de la tabla derecha junto con los datos correspondientes de la tabla izquierda. Lo que falta en la tabla izquierda se rellena con NULL.
Ejercicio práctico
Vamos a comprobar tus conocimientos en la práctica. Aquí tienes un ejercicio:
Tienes las tablas departments con departamentos y employees con empleados: departments:
| department_id | department_name |
|---|---|
| 1 | IT |
| 2 | Ventas |
| 3 | Contabilidad |
employees:
| employee_id | name | department_id |
|---|---|---|
| 101 | Peter | 1 |
| 102 | Eva | 2 |
| 103 | Ron | NULL |
Escribe una consulta usando RIGHT JOIN que devuelva la lista de todos los departamentos, incluyendo los empleados si están en el departamento, o NULL si no hay empleados.
Intenta resolverlo tú primero antes de mirar la respuesta.
Respuesta al ejercicio
Así se verá la consulta:
SELECT
departments.department_name,
employees.name AS employee_name
FROM employees RIGHT JOIN departments
ON employees.department_id = departments.department_id;
El resultado será:
| department_name | employee_name |
|---|---|
| IT | Peter |
| Ventas | Eva |
| Contabilidad | NULL |
Errores típicos al usar RIGHT JOIN
Cuando trabajas con RIGHT JOIN, los principiantes suelen encontrarse con estos problemas:
- Se olvidan de la condición de unión
ON. Si no pones la condición, obtendrás el producto cartesiano de las tablas, lo que puede ser un caos. - Confunden
RIGHT JOINyLEFT JOIN. Si usas las tablas en el orden incorrecto, el resultado será erróneo. - No gestionan los valores
NULL. En los resultados de consultas conRIGHT JOINsuelen aparecerNULL, que hay que interpretar bien o reemplazar usandoCOALESCE().
¡Y eso es todo! Ahora ya sabes cómo usar RIGHT JOIN, entiendes la diferencia entre RIGHT JOIN y LEFT JOIN, y puedes elegir el tipo de unión correcto para tus tareas. En la próxima lección hablaremos más a fondo de FULL OUTER JOIN, donde unimos todo-todo de ambas tablas. ¡Suerte con tus consultas!
GO TO FULL VERSION