La sintaxis INNER y OUTER JOIN se formalizó en la especificación SQL-92. En muchos productos de bases de datos como MySQL y SQL Server, puede omitir la palabra "INTERIOR" de las combinaciones internas y simplemente usar "UNIRSE". Del mismo modo, muchos productos de bases de datos le permiten omitir la palabra "OUTER" y simplemente usar "LEFT JOIN" o "RIGHT JOIN" para uniones externas. La sintaxis anterior de combinación externa de *=
o =*
creó ambigüedades en muchas circunstancias. Muchos productos tienen o muy pronto dejarán de ser compatibles con la sintaxis anterior de combinación externa.
Antes de la especificación SQL-92, los proveedores usaban su propia sintaxis para indicar una combinación externa. Es decir, *=
no fue universal (me parece recordar a alguien que usa ?=
). Además, no implementaron la unión externa de forma universal. Tomemos el siguiente ejemplo:
Table1
Col1 Col2
1 Alice
2 Bob
Table2
Col1 Col2
1 1
2 2
3 3
4 4
Select
From Table1, Table2
Where Table2.Col1 *= Table1.Col1
La consulta anterior sería generalmente rendimiento:
1 1 1 Alice
2 2 2 Bob
3 3 Null Null
4 4 Null Null
Ahora trata de:
Select
From Table1, Table2
Where Table2.Col1 *= Table1.Col1
And Table2.Name = 'Alice'
En algunos productos de base de datos, se llega a:
1 1 1 Alice
En otros lo harías Get:
1 1 1 Alice
2 2 Null Null
3 3 Null Null
4 4 Null Null
En resumen, es ambigua en cuanto a si la filtración sobre la mesa sin conservantes se debe aplicar antes o después de la unión.
Para las respuestas que dicen "para evitar ambigüedades anteriores", ¿podemos tener un ejemplo? – Oddthinking