En el modelo de bases de datos re­la­cio­na­les, se recurre a las se­n­te­n­cias JOIN de SQL para consultar di­fe­re­n­tes tablas de bases de datos. A excepción de CROSS JOIN, las se­n­te­n­cias de JOIN son una co­m­bi­na­ción de producto ca­r­te­siano y selección.

El Sistema Gestor de Bases de Datos (SGBD) primero presenta el producto ca­r­te­siano de dos tablas de bases de datos. A co­n­ti­nua­ció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 di­fe­re­n­cia de todas las demás se­n­te­n­cias de JOIN por mostrar un conjunto de re­su­l­ta­dos 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 re­su­l­ta­dos llamada “View” que no incluye valores nulos.

Dominios web
Compra y registra tu dominio ideal
  • Gratis SSL Wildcard para tra­n­s­fe­re­n­cias de datos más seguras
  • Gratis registro privado para más pri­va­ci­dad

INNER JOIN en la práctica

Ilu­s­tra­mos 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 ide­n­ti­fi­ca­ción (e_id) y el número de de­pa­r­ta­me­n­to al que pe­r­te­ne­cen (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 pa­r­ti­cu­la­ri­da­des: los empleados Ocaña Martínez y Gutiérrez Doblado trabajan en el mismo de­pa­r­ta­me­n­to. A la empleada Oliva Cansino todavía no se le ha asignado un de­pa­r­ta­me­n­to (NULL).

La tabla “De­pa­r­ta­me­n­tos” enumera todos los de­pa­r­ta­me­n­tos de la empresa, in­clu­ye­n­do el número ide­n­ti­fi­ca­dor de cada de­pa­r­ta­me­n­to y su ubicación.

Tabla: de­pa­r­ta­me­n­tos

d_id De­no­mi­na­ción Lo­ca­li­za­ción
1 Ventas Sevilla
2 IT Málaga
3 Recursos Humanos Marbella
4 In­ve­s­ti­ga­ción Málaga

Ambas tablas están enlazadas por una relación de clave externa. El ID de de­pa­r­ta­me­n­to, que actúa como clave primaria en la tabla “De­pa­r­ta­me­n­tos”, 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 de­te­r­mi­nar, por ejemplo, la lo­ca­li­za­ción del puesto de trabajo de un empleado.

Cuando se consultan bases de datos re­la­cio­na­les, se suele definir como condición de selección la co­rre­s­po­n­de­n­cia entre una clave primaria y una externa. La condición se considera cumplida si la clave externa se­le­c­cio­na­da 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 re­la­cio­nal como sigue:

empleados⋈d_id=d_idde­pa­r­ta­me­n­tos

Sin embargo, los sistemas de bases de datos re­la­cio­na­les no aceptan comandos en la sintaxis del álgebra re­la­cio­nal, sino como se­n­te­n­cias 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 al­te­r­na­ti­va, SQL ofrece la po­si­bi­li­dad de in­tro­du­cir datos (INSERT INTO), ca­m­biar­los (UPDATE) o borrarlos (DELETE FROM). El comando SELECT va seguido de los datos que han de ser re­cu­pe­ra­dos. 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 es­pe­ci­fi­ca­ció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 “De­pa­r­ta­me­n­tos” y “Empleados”. También uti­li­za­mos la palabra clave ON para es­pe­ci­fi­car una condición para el enlace. Solo queremos enlazar los registros de datos y editarlos como una tabla de re­su­l­ta­dos, donde el d_id de la tabla de “Empleados” se co­rre­s­po­n­de con el d_id de la tabla “De­pa­r­ta­me­n­tos”.

Consejo

Dado que el INNER JOIN es el JOIN de SQL más im­po­r­ta­n­te, 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 = de­pa­r­t­me­n­tos.d_id vuelca la siguiente tabla de re­su­l­ta­dos.

Tabla: SQL INNER JOIN de “Empleados” y “De­pa­r­ta­me­n­tos”

e_id Apellidos Nombre Empleados.d_id de­pa­r­ta­me­n­tos.d_id De­no­mi­na­ción Lo­ca­li­za­ció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 re­su­l­ta­n­te 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 equi­va­le­n­te 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 de­pa­r­ta­me­n­to todavía. El de­pa­r­ta­me­n­to de in­ve­s­ti­ga­ción tampoco cuenta con personal. Estos conjuntos de datos están ocultos en INNER JOIN, cuya función es ide­n­ti­fi­car a cada empleado con su de­pa­r­ta­me­n­to.

Si lo que se pretende es detectar las irre­gu­la­ri­da­des 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 te­r­mi­no­lo­gía SQL se co­rre­s­po­n­de con el THETA JOIN del álgebra re­la­cio­nal. El THETA JOIN se di­fe­re­n­cia de los EQUI JOIN y NON EQUI JOIN porque ofrece a los usuarios un conjunto ilimitado de ope­ra­do­res de co­m­pa­ra­ción para elegir. Los EQUI JOIN, sin embargo, re­s­tri­n­gen la condición de la selección a la igualdad de valores de columna. Por su parte, los NON EQUI JOIN permiten todos los ope­ra­do­res de co­m­pa­ra­ción excepto el signo igual.

Tipo de JOIN Ope­ra­do­res de co­m­pa­ra­ción pe­r­mi­ti­dos
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 an­te­rio­res), 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 “De­pa­r­ta­me­n­tos”, has de proceder de esta forma:

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

La sentencia SQL indica al SGBD que realice la co­m­bi­na­ción entre las tablas indicadas. La condición de selección se im­ple­me­n­ta uti­li­za­n­do la palabra clave USING, que es­pe­ci­fi­ca 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 re­su­l­ta­dos si el SGBD encuentra valores idénticos en las columnas d_id.

La tabla de re­su­l­ta­dos del NATURAL JOIN se di­fe­re­n­cia de la tabla de la de INNER JOIN en que las columnas coin­ci­de­n­tes de las tablas uti­li­za­das no aparecen du­pli­ca­das, sino que se fusionan en una sola.

Tabla: NATURAL JOIN de las tablas “Empleados” y “De­pa­r­ta­me­n­tos”

e_id Apellidos Nombre d_id De­no­mi­na­ción Lo­ca­li­za­ció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 de­pa­r­ta­me­n­tos según aparecen en ambas tablas empleado.d_id y de­pa­r­ta­me­n­to.d_id, se muestra solo una columna con la de­no­mi­na­ció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 abre­via­ción se muestra en la siguiente sentencia SQL.

SELECT * FROM empleados NATURAL JOIN departamentos;

El operador NATURAL JOIN conecta au­to­má­ti­ca­me­n­te las tablas mediante las columnas con el mismo nombre. Es por eso que no es necesario definir ex­plí­ci­ta­me­n­te la condición de selección.

Nota

NATURAL JOIN se convierte au­to­má­ti­ca­me­n­te en una INNER JOIN. Sin embargo, si deseas convertir un OUTER JOIN en un NATURAL JOIN, necesitas palabras clave adi­cio­na­les (por ejemplo, NATURAL LEFT OUTER JOIN).

Ir al menú principal