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

Guía ilustrada del INNER JOIN de SQL

¿Qué es un INNER JOIN de SQL y cómo funciona? Averigüémoslo.

En mi último artículo, hablé de la función Operación CROSS JOIN en SQL. Hoy, veremos INNER JOIN y cómo utilizarlo. ¿Es lo mismo que un JOIN? ¿Cuántas tablas se pueden enlazar con un INNER JOIN?

Todas estas son buenas preguntas. Veamos las respuestas.

¿Qué es un INNER JOIN?

INNER JOIN combina datos de varias tablas uniéndolas en base a un registro coincidente. Este tipo de unión requiere una condición de unión, que explicaremos en un momento.

Para ilustrar cómo funciona INNER JOIN, utilizaremos algunas tablas sencillas. Dos de ellas, color y shoes se muestran a continuación:

color

id name
1 yellow
2 green
3 pink

shoes

id size color_id
1 seven 2
2 eight 2
3 nine 2
4 seven 1
5 nine 1
6 seven 3
7 ten NULL

La tabla color almacena un número de identificación y un nombre para cada color. La tabla shoes tabla almacena un número de identificación para cada par de zapatos, la talla del zapato y un número de identificación que se refiere a un color en la color tabla.

Cómo funciona el INNER JOIN

En este ejemplo, INNER JOIN une los registros de la tabla shoes con los registros de la tabla color a través de la columna color_id de la tabla shoes de la tabla. Los valores de esta columna son los mismos que los de la columna id de la tabla color de la tabla, por lo que produce el conjunto de resultados previsto. Observe la siguiente consulta:

SELECT *  FROM  shoes
INNER JOIN color  ON color.id = shoes.color_id;

La sentencia SELECT toma todos los registros de la tabla que aparece después de la cláusula FROM - en este caso, la tabla shoes tabla. A continuación, hay un INNER JOIN con el nombre de la tabla con la que queremos comparar los registros (es decir, la color tabla). El predicado ON establece la condición de coincidencia que deben tener los registros de ambas tablas. Aquí la condición es que el campo id de la tabla color y el campo color_id de la tabla shoes deben tener valores coincidentes. Si un registro no tiene una coincidencia, quedará fuera de los resultados.

Observe el conjunto de resultados de esta consulta:

id size color_id id name
1 seven 2 2 green
2 eight 2 2 green
3 nine 2 2 green
4 seven 1 1 yellow
5 nine 1 1 yellow
6 seven 3 3 pink

Ahora podemos ver el color de cada par de zapatos, gracias a INNER JOIN. Pero fíjate que el shoes registro con NULL en la columna color_id no se muestra: no ha coincidido con ninguno de los registros de la color tabla.

¿JOIN o INNER JOIN?

Puede omitir la parte INNER de INNER JOIN; JOIN funciona de la misma manera. Observe la siguiente sentencia.

SELECT *  FROM  shoes
JOIN color  ON color.id = shoes.color_id;

Unir con WHERE

También puede utilizar una cláusula WHERE como una INNER JOIN. (Esta es una versión más antigua de la sintaxis SQL (ANSI-89); los comandos JOIN utilizan ANSI-92). Así es como funciona el uso de un WHERE:

SELECT *  FROM  shoes, color  
WHERE color.id = shoes.color_id ;

El resultado es el mismo:

id size color_id id name
1 seven 2 2 green
2 eight 2 2 green
3 nine 2 2 green
4 seven 1 1 yellow
5 nine 1 1 yellow
6 seven 3 3 pink

Usando un INNER JOIN en múltiples tablas

INNER JOIN puede utilizarse en más de dos tablas. Mire las tres tablas de abajo:

color

id name
1 yellow
2 green
3 pink

material

id name
1 leather
2 cotton
3 NULL

shoes

id size color_id material_id
1 seven 2 1
4 seven 1 2
5 nine 1 1
6 seven 3 NULL
7 ten NULL 1

Utilicemos un INNER JOIN para combinar la información de las tres tablas. La consulta de abajo recupera los registros de todos los zapatos que tienen información de color y material:

SELECT *  FROM  shoes
JOIN color  ON color.id = shoes.color_id
JOIN material  ON material.id = shoes.material_id ;

Observe que sólo se muestran en el conjunto de resultados los zapatos que no tienen registros deNULL en las columnas color_id y material_id.

id size color_id material_id id name id name
1 seven 2 1 2 green 1 leather
4 seven 1 2 1 yellow 2 cotton
5 nine 1 1 1 yellow 1 leather

INNER JOIN vs. CROSS JOIN

Como hemos visto, INNER JOIN combina la información de dos o más registros que tienen campos coincidentes. ¿Qué ocurre cuando se utiliza CROSS JOIN para unir los registros shoes y color CROSS JOIN no toma ninguna condición de ON, lo que significa que devuelve un producto cartesiano. Observa la consulta y el conjunto de resultados que se muestran a continuación:

SELECT *  FROM  shoes
CROSS JOIN  color ;

¿Resultado?

id size color_id id name
1 seven 2 1 yellow
2 eight 2 1 yellow
3 nine 2 1 yellow
4 seven 1 1 yellow
5 nine 1 1 yellow
6 seven 3 1 yellow
7 ten NULL 1 yellow
1 seven 2 2 green
2 eight 2 2 green
3 nine 2 2 green
4 seven 1 2 green
5 nine 1 2 green
6 seven 3 2 green
7 ten NULL 2 green
1 seven 2 3 pink
2 eight 2 3 pink
3 nine 2 3 pink
4 seven 1 3 pink
5 nine 1 3 pink
6 seven 3 3 pink
7 ten NULL 3 pink

Todos los registros de la tabla shoes se han unido a todos los registros de la tabla color tabla. Esto crea algunos errores. Por ejemplo, algunos zapatos no aparecen con el color correcto: los zapatos de la talla ocho sólo están disponibles en verde (su valor color_id es 2), pero en esta instancia de unión se emparejan con otros colores. Los registros de NULL en la tabla shoes también se emparejan con los colores, aunque no tengan un valor comparable en el campo color_id.

Más información sobre INNER JOINs

INNER JOINLas combinaciones de colores son bastante comunes en SQL. Nuestro objetivo en este artículo fue introducir los conceptos detrás de INNER JOIN, pero hay mucho más que aprender. ¿Por qué no echas un vistazo a la página de LearnSQL SQL para principiantes curso para saber más?