CodeGym /Cursos /SQL SELF /`RIGHT JOIN` y su uso

`RIGHT JOIN` y su uso

SQL SELF
Nivel 11 , Lección 3
Disponible

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:

  1. tabla izquierda se escribe antes de RIGHT JOIN;
  2. 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.

  1. 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.
  2. Elegir la tabla principal Normalmente eliges LEFT o RIGHT segú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.

  3. Equivalencia Cualquier RIGHT JOIN se puede reescribir como LEFT JOIN cambiando 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 JOIN por 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:

  1. 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.
  2. Confunden RIGHT JOIN y LEFT JOIN. Si usas las tablas en el orden incorrecto, el resultado será erróneo.
  3. No gestionan los valores NULL. En los resultados de consultas con RIGHT JOIN suelen aparecer NULL, que hay que interpretar bien o reemplazar usando COALESCE().

¡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!

Comentarios
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION