Volver a la lista de artículos Artículos
Lectura de 6 minutos

¿Qué es un INNER JOIN de SQL?

¿Cómo se combinan datos de diferentes tablas en una consulta? Una función de SQL llamada JOIN es el operador más utilizado para crear consultas complejas. Aprenda lo básico en este artículo.

SQL nos permite seleccionar datos de más de una tabla. De hecho, la idea de utilizar bases de datos relacionales es seleccionar datos de tablas relacionadas. Y para ello podemos utilizar el operador JOIN de SQL.

Hay muchos tipos de JOINs en SQL. En este artículo, nos centraremos en INNER JOIN, que es el comando por defecto de JOIN (es decir, el que se obtiene si se utiliza la palabra clave JOIN por sí misma).

¿Cuándo se necesita JOIN?

¿Por qué necesitaríamos unir datos de varias tablas? La respuesta sencilla es que a veces una tabla no contiene todos los datos que se necesitan.

Imagine que la tabla movie almacena información en las columnas id, title, production_year, y director_id.

idtitleproduction_yeardirector_id
1Psycho19601
2Midnight in Paris20112
3Sweet and Lowdown19932
4Talk to her20023
5The skin I live here20113

Otra tabla, directorcontiene información sobre los directores: sus id, name, y birth_year.

idnamebirth_year
1Alfred Hitchcock1899
2Woody Allen1935
3Pedro Almodóvar1949

Observe que cada película sólo tiene una columna relacionada con el director: director_id. Los mismos valores de número de identificación en la tabla director (en la columna director_id ) y en la tabla movie (en la columna id ).

Queremos mostrar los datos de cada película junto con los datos de su director. El resultado es una nueva tabla con los datos de dos tablas movie y director. Las tablas se combinan (o se unen) en función de los números de identificación de los directores. En otras palabras, las películas con un director_id específico se combinan con la información del director con este ID - por ejemplo, la película Psicosis con director_id=1 se corresponde con el registro donde id=1 (Alfred Hitchcock) en la director tabla. Observe el conjunto de resultados:

idtitleproduction_yeardirector_ididnamebirth_year
1Psycho196011Alfred Hitchcock1899
2Midnight in Paris201122Woody Allen1935
3Sweet and Lowdown199322Woody Allen1935
4Talk to her200233Pedro Almodóvar1949
5The skin I live here201133Pedro Almodóvar1949

Una versión ilustrada de un ejemplo similar se presenta en el artículo Una Guía Ilustrada del INNER JOIN de SQL.

Cómo utilizar el JOIN en una consulta SQL

Ahora, analicemos la consulta que acabamos de utilizar. Aquí está de nuevo:

SELECT *  
FROM movie  
JOIN director  
ON movie.director_id=director.id;

JOIN es una forma más corta de la cláusula INNER JOIN; puede usarlas indistintamente.

Después de SELECT sus columnas, pone la palabra clave FROM y el nombre de la primera tabla (en este ejemplo, movie). Luego pones JOIN (o INNER JOIN), seguido del nombre de la segunda tabla (aquí, director). A continuación, la palabra clave ON y la condición de unión (es decir, cómo hacer coincidir los registros de ambas tablas). En este caso, la condición de unión hace coincidir los valores de la columna director_id de la tabla movie con la columna id de la tabla director.

De este modo, los registros de la tabla movie coinciden con los registros correctos de la tabla director. Ahora sabemos que la película Sweet and Lowdown fue dirigida por el director Woody Allen, nacido en 1935. Esta película tiene director_id=2; hay un valor que coincide con la columna correspondiente (id) en la tabla director.

La siguiente animación muestra cómo funciona el operador JOIN y qué registros se devuelven:

JOIN

Un operador JOIN funciona lógicamente, en dos pasos. El primer paso devuelve un producto cartesiano, es decir, cada fila de la primera tabla se combina con cada fila de la segunda tabla. En el siguiente paso, sólo se devuelven los pares de registros que cumplen la condición de la cláusula ON - en este ejemplo, sólo las filas en las que director_id en movie es igual a id en director.

Tenga en cuenta que los valores utilizados en la condición de unión no tienen por qué ser números. También puede utilizar valores de texto y otras condiciones más complejas. Puede encontrar más información en el artículo SQL INNER JOIN Explained in Simple Words.

¿Qué pasa si los registros no coinciden?

¿Qué ocurre si hay registros en la primera tabla que no pueden coincidir con registros de la segunda tabla, o viceversa? ¿Cómo funciona INNER JOIN en este caso? Veamos un ejemplo. Aquí está la tabla movie tabla de nuevo:

idtitleproduction_yeardirector_id
1Psycho19601
2Midnight in Paris20112
3Sweet and Lowdown19932
4Talk to her20023
5The skin I live in20113
6The new house2020NULL

Y aquí está director:

idnamebirth_year
1Alfred Hitchcock1899
2Woody Allen1935
3Pedro Almodóvar1949
4Martin Scorsese1942

Aquí está la misma consulta:

SELECT title, production_year, director_id,
       id, name, birth_year   
FROM movie  
JOIN director  
ON movie.director_id=director.id;

La tabla de resultados contiene sólo los registros que son un par coincidente:

idtitleproduction_yeardirector_ididnamebirth_year
1Psycho196011Alfred Hitchcock1899
2Midnight in Paris201122Woody Allen1935
3Sweet and Lowdown199322Woody Allen1935
4Talk to her200233Pedro Almodóvar1949
5The skin I live in201133Pedro Almodóvar1949

Si miras la tabla movie, la columna director_id es NULL para la película La casa nueva. Y en la tabla directorel director Martin Scorsese (id=4) no está relacionado con ninguna fila de la tabla movie. Por lo tanto, estas filas no se muestran en el conjunto de resultados.

La regla para INNER JOIN (JOIN) es que sólo se devuelven las filas que coinciden en ambas tablas. En los otros tipos de operadores JOIN este comportamiento es diferente. Amplíe este tema leyendo el artículo Tipos de JOIN de SQL explicados.

Filtrado de Registros en el Conjunto de Resultados

También se pueden filtrar los registros devueltos por JOIN. Por ejemplo, podemos listar sólo aquellas películas y sus directores en las que el director haya nacido después de 1940. Esta es la consulta:

SELECT title, production_year, director_id,
       id, name, birth_year   
FROM movie  
JOIN director  
ON movie.director_id=director.id
WHERE director.birth_year>1940;

Devuelve el resultado:

idtitleproduction_yeardirector_ididnamebirth_year
4Talk to her200233Pedro Almodóvar1949
5The skin I live in201133Pedro Almodóvar1949

Una vez más, tenemos filas de la tabla movie combinadas con filas de la tabla director. Inicialmente, la condición de unión es la misma (ON director.id=película.director_id).

Sin embargo, en el siguiente paso, se eliminan los registros con un valor inferior o igual a 1940 en la columna año_nacimiento. Así, no se encuentra Woody Allen en el conjunto de resultados porque nació en 1935 (antes/menos de 1940). Tampoco está Alfred Hitchcock, que nació en 1899. Lo hemos hecho gracias a WHERE director.birth_year>1940.

¿Quieres aprender más sobre Tipos de JOIN en SQL?

Si desea ampliar sus conocimientos, pruebe nuestro SQL para principiantes curso, que contiene más información sobre la unión de tablas (¡incluyendo muchos ejercicios de práctica!). Forma parte del curso Principios básicos de SQLque te ayudará a llevar tus conocimientos de SQL al siguiente nivel.

O tal vez ya sabes algo de SQL y te gustaría aprender más sobre los JOINs. En ese caso, te sugiero que mires Cómo aprender Tipos de JOIN en SQL, Tipos de JOIN de SQL explicados, y nuestra Hoja de trucos de JOIN de SQL. También puede tomar nuestro curso Tipos de JOIN en SQL . Luego vaya a practicar lo que sabe usando nuestra ruta de aprendizaje en línea Ejercicio de SQL . ¡Feliz aprendizaje!