Ir al contenido principal

La Clausula NATURAL JOIN

La sintaxis general para la clausula NATURAL JOIN es la siguiente:

SELECT table1.column, table2.column
FROM table1
NATURAL JOIN table2;

El Natural Join Puro identifica las columnas con nombres idénticos en la tabla1 y la tabla2 e implícitamente une las tablas utilizando todas estas columnas comunes o idénticas. Las columnas en la clausula SELECT pueden ser cualificadas utilizando la notación dot a menos que una de ellas sea columna de unión.

Ejemplos:

-- Consulta 1
SELECT l.location_id, l.street_address, l.postal_code, l.city, l.state_province, country_id, c.country_name, c.region_id
FROM locations l NATURAL JOIN countries c;

El Natural Join identifica columnas con nombres idénticos en ambas tablas. En la consulta 1 COUNTRY_ID aparece en las dos tablas y esta es la columna de unión. Utilizando la sintaxis de Natural Join no podemos utilizar la notación dot en columnas unión, estas las debemos de escribir solo por su nombre.

-- Consulta 2
SELECT l.location_id, l.street_address, l.postal_code, l.city, l.state_province, l.country_id, c.country_id, c.country_name, c.region_id
FROM locations l, countries c
WHERE l.country_id = c.country_id;

La consulta 2 está escrita con la sintaxis de Oracle Tradicional y recupera las mismas filas que la consulta 1. En la sintaxis Oracle Tradicional podemos utilizar la notación dot en la columnas unión. Natural Join debe ser utilizado con mucha precaución ya que el join es desarrollado automáticamente.

-- Consulta 3
SELECT * FROM jobs NATURAL JOIN countries;

Desarrollar un Natural Join entre dos tablas que no comparten nombres de columnas idénticos, resulta en un Producto Cartesiano.


-- Consulta 4
SELECT * FROM jobs, countries;

La consulta 4 devuelve un Producto Cartesiano pero con la sintaxis Oracle Tradicional.

La sintaxis del Natural Join es simple pero propenso a una fundamental debilidad. Sufre el riesgo que  columnas con el mismo nombre que no tengan ninguna relación unirse  y puedan no tener incluso el mismo tipo de dato.

Si desea unir dos tablas con nombres de columnas idénticos  pero con diferentes tipos de datos esto causara un error. Ya que Oracle no convierte implícitamente los tipos en este caso.

Comentarios