Ir al contenido principal

Inner vs Outer Join

Cuando Equijoins y Nonequijoins son desarrollados, filas de la Tabla Source y Target son emparejadas utilizando una condición Join formuladas con un operador de igualdad o desigualdad respectivamente. Estas son referidas como Inner Joins. Un Outer Join es desarrollado cuando filas, que no son recuperadas mediante un inner join, son recuperadas.

Para ejemplificar un Outer Join necesitamos una relación de tablas como Master-Detail o Parent-Child. En el esquema HR de ejemplo hay varios pares de tablas con tal relación. Una de ellas es DEPARTMENTS y EMPLOYEES. La tabla DEPARTMENTS almacena una lista de departamentos con DEPARTMENT_NAME y DEPARTMENT_ID. Cada fila de EMPLOYEES tiene una columna llamada DEPARTMENT_ID restringida a ser un valor existente en la tabla DEPARTMENT o NULL. Esto conduce a uno de los tres escenarios. El cuarto escenario puede aparecer si la restricción entre las dos tablas fuese removida.

1.       Una fila en EMPLOYEE tiene un valor en DEPARTMENT_ID que coincide con una fila en DEPARMENTS.

2.       Una fila en EMPLOYEE tiene un valor NULL en DEPARTMENT_ID.

3.       Hay filas en la tabla DEPARTMENTS con un valor de DEPARTMENT_ID que nunca ha sido almacenado en ningún registro de la tabla EMPLOYEE.

4.       Una fila en EMPLOYEE tiene un valor en DEPARTMENT_ID que no está en la tabla DEPARMENTS.

El primer escenario describe un Natural Join entre dos tablas. El segundo y el tercero escenario puede cuásar problemas. Unir EMPLOYEES y DEPARTMENT resulta en filas de EMPLOYEES que están siendo excluidas. Un Outer Join puede ser utilizado para incluir las filas huérfanas en el conjunto de resultado. El cuarto escenario raramente debería ocurrir, esto se debería a un mal diseño de base de datos. Mediante una restricción de Foreing Key se debería prevenir la inserción de filas hijas sin valor en la columna padre. Desde que las filas serán excluidas por un inner join, pueden ser recuperadas utilizando un outer join.

Un Left Outer Join entre las tablas Source y Target devuelve las filas de un inner join y las filas de la tabla Source excluidas por un inner join.

Un Right Outer Join  entre las tablas Source y Target devuelve las filas de un inner join y las filas de la tabla Target excluidas por un inner join.

Un Full Outer Join entre las tablas Source y target devuelve las filas de un inner join y las filas de la tabla Source y Target excluidas por un inner join.

Comentarios