INNER JOIN: definición y aplicación

En el modelo de bases de datos relacionales, se recurre a las sentencias JOIN de SQL para consultar diferentes tablas de bases de datos. A excepción de CROSS JOIN, las sentencias de JOIN son una combinación de producto cartesiano y selección.

El Sistema Gestor de Bases de Datos (SGBD) primero presenta el producto cartesiano de dos tablas de bases de datos. A continuación, filtra el resultado según una condición de selección definida por el usuario a través de una sentencia SQL. El INNER JOIN se diferencia de todas las demás sentencias de JOIN por mostrar un conjunto de resultados mínimos, pues solo se muestran los registros de datos del producto cruzado que cumplen la condición de selección. Todo ello se presenta en una tabla de resultados llamada “View” que no incluye valores nulos.

INNER JOIN en la práctica

Ilustramos el INNER JOIN con un ejemplo, partiendo de dos tablas. La tabla “Empleados” contiene todos los empleados de una empresa, junto a sus números de identificación (e_id) y el número de departamento al que pertenecen (d_id).

Tabla: empleados

e_id Apellidos Nombre d_id
1 García Hurtado Macarena 3
2 Ocaña Martínez Francisco 1
3 Gutiérrez Doblado Elena 1
4 Hernández Soria Manuela 2
5 Oliva Cansino Andrea NULL

Esta tabla muestra dos particularidades: los empleados Ocaña Martínez y Gutiérrez Doblado trabajan en el mismo departamento. A la empleada Oliva Cansino todavía no se le ha asignado un departamento (NULL).

La tabla “Departamentos” enumera todos los departamentos de la empresa, incluyendo el número identificador de cada departamento y su ubicación.

Tabla: departamentos

d_id Denominación Localización
1 Ventas Sevilla
2 IT Málaga
3 Recursos Humanos Marbella
4 Investigación Málaga

Ambas tablas están enlazadas por una relación de clave externa. El ID de departamento, que actúa como clave primaria en la tabla “Departamentos”, se ha integrado como clave externa en la tabla “Empleados”.

Esta conexión es la que permite generar un INNER JOIN con ambas tablas, que puede ayudar a determinar, por ejemplo, la localización del puesto de trabajo de un empleado.

Cuando se consultan bases de datos relacionales, se suele definir como condición de selección la correspondencia entre una clave primaria y una externa. La condición se considera cumplida si la clave externa seleccionada de una tabla coincide con la clave primaria de la otra tabla (=), es decir, solo se emiten aquellos registros de datos que contienen valores comunes.

Este tipo de INNER JOIN se anota en álgebra relacional como sigue:

empleados⋈d_id=d_iddepartamentos

Sin embargo, los sistemas de bases de datos relacionales no aceptan comandos en la sintaxis del álgebra relacional, sino como sentencias SQL.

SELECT * FROM empleados INNER JOIN departamentos ON empleados.e_id = departamentos.d_id;

El comando SELECT indica al SGBD que recupere datos de la base de datos. Como alternativa, SQL ofrece la posibilidad de introducir datos (INSERT INTO), cambiarlos (UPDATE) o borrarlos (DELETE FROM). El comando SELECT va seguido de los datos que han de ser recuperados. Como queremos recuperar el conjunto de datos completo, elegimos un marcador de posición: el asterisco (*).

El comando SELECT siempre requiere la palabra clave FROM y la especificación de la tabla o grupo de tablas (JOIN) de las que se van a recuperar los datos. En nuestro caso, la fuente de datos es un INNER JOIN en las tablas “Departamentos” y “Empleados”. También utilizamos la palabra clave ON para especificar una condición para el enlace. Solo queremos enlazar los registros de datos y editarlos como una tabla de resultados, donde el d_id de la tabla de “Empleados” se corresponde con el d_id de la tabla “Departamentos”.

Consejo

Dado que el INNER JOIN es el JOIN de SQL más importante, es posible también omitir la palabra clave "INNER" en el comando.

Un INNER JOIN que combina las tablas a con la condición empleados.d_id = departmentos.d_id vuelca la siguiente tabla de resultados.

Tabla: SQL INNER JOIN de “Empleados” y “Departamentos”

e_id Apellidos Nombre Empleados.d_id departamentos.d_id Denominación Localización
1 García Hurtado Macarena 3 3 Recursos Humanos Marbella
2 Ocaña Martínez Francisco 1 1 Ventas Sevilla
3 Gutiérrez Doblado Elena 1 1 Ventas Sevilla
4 Hernández Soria Manuela 2 2 IT Málaga

Si comparas la tabla resultante con las dos tablas de salida, caerás en la cuenta de que falta un registro de datos de cada tabla. Se trata de los registros cuyo valor en la columna d_id no tiene equivalente en la otra tabla.

(5, Oliva Cansino, Andrea, NULL) 

y

(4, Investigación, Málaga) 

A la empleada Oliva Cansino no se le ha asignado ningún departamento todavía. El departamento de investigación tampoco cuenta con personal. Estos conjuntos de datos están ocultos en INNER JOIN, cuya función es identificar a cada empleado con su departamento.

Si lo que se pretende es detectar las irregularidades y hacerlas visibles en la consulta, hay que elegir un OUTER JOIN en lugar de un INNER JOIN.

Subtipos de INNER JOIN

La sentencia INNER JOIN se pueden ejecutar como THETA JOIN, EQUI JOIN, NON EQUI JOIN y NATURAL JOIN.

THETA JOIN, EQUI JOIN y NON EQUI JOIN

El INNER JOIN de la terminología SQL se corresponde con el THETA JOIN del álgebra relacional. El THETA JOIN se diferencia de los EQUI JOIN y NON EQUI JOIN porque ofrece a los usuarios un conjunto ilimitado de operadores de comparación para elegir. Los EQUI JOIN, sin embargo, restringen la condición de la selección a la igualdad de valores de columna. Por su parte, los NON EQUI JOIN permiten todos los operadores de comparación excepto el signo igual.

Tipo de JOIN Operadores de comparación permitidos
THETA JOIN = (igual) < (menor que) > (mayor que)≤ (menos o igual que)≥ (mayor o igual que)<> (desigual)!= (desigual)
EQUI JOIN = (igual)
NON EQUI JOIN < (menor que) > (mayor que)≤ (menor o igual que)≥ (mayor o igual que)<> (desigual)!= (desigual)

NATURAL JOIN

Si dos tablas están enlazadas por columnas con el mismo nombre (como en los ejemplos anteriores), los INNER JOIN se aplican como NATURAL JOIN.

NATURAL JOIN es un subtipo de EQUI JOIN y, al igual que este, requiere la igualdad de dos valores de columna como condición de selección.

Si quieres realizar un NATURAL INNER JOIN con las tablas “Empleados” y “Departamentos”, has de proceder de esta forma:

SELECT * FROM empleados INNER JOIN departamentos USING(d_id);

La sentencia SQL indica al SGBD que realice la combinación entre las tablas indicadas. La condición de selección se implementa utilizando la palabra clave USING, que especifica las columnas que se deben verificar para la igualdad. La condición es que en las dos tablas exista una columna d_id. Los registros de datos de dichas tablas solo se incluirán en el conjunto de resultados si el SGBD encuentra valores idénticos en las columnas d_id.

La tabla de resultados del NATURAL JOIN se diferencia de la tabla de la de INNER JOIN en que las columnas coincidentes de las tablas utilizadas no aparecen duplicadas, sino que se fusionan en una sola.

Tabla: NATURAL JOIN de las tablas “Empleados” y “Departamentos”

e_id Apellidos Nombre d_id Denominación Localización
1 García Hurtado Macarena 3 Recursos Humanos Marbella
2 Ocaña Martínez Francisco 1 Ventas Sevilla
3 Gutiérrez Doblado Elena 1 Ventas Sevilla
4 Hernández Soria Manuela 2 IT Málaga

En lugar de hacer incluir los números de departamentos según aparecen en ambas tablas empleado.d_id y departamento.d_id, se muestra solo una columna con la denominación d_id.

Asimismo, es posible usar una fórmula más corta sin incluir USING para obtener la tabla de NATURAL JOIN. En su lugar, se utiliza el operador NATURAL JOIN. Esta abreviación se muestra en la siguiente sentencia SQL.

SELECT * FROM empleados NATURAL JOIN departamentos;

El operador NATURAL JOIN conecta automáticamente las tablas mediante las columnas con el mismo nombre. Es por eso que no es necesario definir explícitamente la condición de selección.

Nota

NATURAL JOIN se convierte automáticamente en una INNER JOIN. Sin embargo, si deseas convertir un OUTER JOIN en un NATURAL JOIN, necesitas palabras clave adicionales (por ejemplo, NATURAL LEFT OUTER JOIN).


¡No te vayas! ¡Tenemos algo para ti!
Consigue tu dominio .es un año gratis.

Introduce el dominio que deseas en la barra de búsqueda para comprobar su disponibilidad.
12 meses desde 0€/año IVA incl.
después 12,10 €/año IVA incl.