Diferencia entre UNIÓN y UNIÓN INTERIOR


Ambas combinaciones me darán los mismos resultados:

SELECT * FROM table JOIN otherTable ON table.ID = otherTable.FK

Vs

SELECT * FROM table INNER JOIN otherTable ON table.ID = otherTable.FK

¿Hay alguna diferencia entre las declaraciones en ejecución o no?

¿Difiere entre diferentes implementaciones SQL?

Author: Palec, 2009-02-19

7 answers

Son funcionalmente equivalentes, pero INNER JOIN puede ser un poco más claro de leer, especialmente si la consulta tiene otros tipos de combinación (es decir, LEFT o RIGHT o CROSS) incluidos en ella.

 871
Author: palehorse,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2014-12-01 16:35:04

Simplemente escribiendo JOIN realiza un INNER JOIN por defecto.

Para todos los demás, una imagen a veces vale más que cientos de palabras:

Introduzca la descripción de la imagen aquí

Imagen cortesía de Code Project.


 661
Author: Damian Drygiel,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2018-05-19 10:59:18

No, no hay diferencia, pura azúcar sintáctico.

 209
Author: Quassnoi,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2009-02-19 14:48:41

INTERIOR JOIN = JOIN :

INNER JOIN es el predeterminado si no especifica el tipo cuando usa la palabra JOIN.

También puede usar UNIÓN EXTERNA IZQUIERDA o UNIÓN EXTERNA DERECHA, en cuyo caso la palabra EXTERIOR es opcional, o puede especificar LA COMBINACIÓN CRUZADA.

O

Para una unión interna, la sintaxis es:

SELECCIONE ...
DE la tabla
[INTERIOR] UNIRSE A la tabla

(en otras palabras, la palabra clave "INTERIOR" es opcional - los resultados son los mismos con o sin él)

 115
Author: net_prog,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-03-30 10:41:27

De manera similar a OUTER JOINs, la palabra "OUTER" es opcional. Es la palabra clave LEFT o RIGHT que hace que JOIN sea "OUTER" JOIN.

Sin embargo, por alguna razón siempre uso "OUTER" como en LEFT OUTER JOIN y nunca LEFT JOIN, pero nunca uso INNER JOIN, sino que solo uso "JOIN":

SELECT ColA, ColB, ...
FROM MyTable AS T1
     JOIN MyOtherTable AS T2
         ON T2.ID = T1.ID
     LEFT OUTER JOIN MyOptionalTable AS T3
         ON T3.ID = T1.ID
 44
Author: Kristen,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2018-05-19 10:57:15

¿Difiere entre diferentes implementaciones SQL?

Sí, Microsoft Access no permite solo join. Requiere inner join.

 41
Author: Michał Powaga,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2018-05-19 10:57:53

Como las otras respuestas ya dicen, no hay diferencia en tu ejemplo.

La parte relevante de la gramática está documentada aquí

<join_type> ::= 
    [ { INNER | { { LEFT | RIGHT | FULL } [ OUTER ] } } [ <join_hint> ] ]
    JOIN

Mostrando que todos son opcionales. La página aclara además que

INNER Especifica que se devuelven todos los pares de filas coincidentes. Descartar filas no coincidentes de ambas tablas. Cuando no se especifica ningún tipo de unión, esto es el valor predeterminado .

La gramática también indica que hay una vez donde las INNER es requerido sin embargo. Al especificar una sugerencia de unión.

Ver el siguiente ejemplo

CREATE TABLE T1(X INT);
CREATE TABLE T2(Y INT);

SELECT *
FROM   T1
       LOOP JOIN T2
         ON X = Y;

SELECT *
FROM   T1
       INNER LOOP JOIN T2
         ON X = Y;

introduzca la descripción de la imagen aquí

 21
Author: Martin Smith,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2015-08-02 16:38:33