Los diseñadores del lenguaje SQL con razón sintieron que la aplicación de izquierda a derecha precedencia de combinaciones sería una restricción innecesaria en el idioma (por desgracia, no se sentían lo mismo de ordenación columna!)
No hace parece para ser una fuerte preferencia por LEFT OUTER
aquí en Stackoverflow, en la medida en que la gente cambie la unión completa solo para poder usar LEFT
(tuvimos uno here ayer).
Digamos que escribió originalmente en su consulta Table_2 INNER JOIN Table_1
antes de darse cuenta de que realmente necesita una unión externa que preserve todas las filas de Table_1
. Sería mucho más simple cambiar INNER
a RIGHT OUTER
que cambiar la unión completa para poder usar LEFT OUTER
. Lo simple es bueno aquí porque es menos invasivo y, por lo tanto, hay menos riesgo de que la intención de la consulta se modifique inadvertidamente.
Para utilizar otro ejemplo similar, considere el operador relacional semi join; Al ser parte del álgebra relacional, no se puede considerar que una tecnología esté completa sin ella. Aunque Standard SQL tiene un predicado de semi unión MATCH
, no se implementa ampliamente. Sin embargo, la mayoría de los productos SQL admiten varias soluciones. El enfoque más común visto en Stackoverflow parece ser usar INNER JOIN
con DISTINCT
en la cláusula SELECT
y omitir los atributos de la tabla unida. Esto es seguido de cerca usando WHERE table_1.ID IN (SELECT ID FROM Table_2)
. Siguiente más popular es WHERE EXISTS (SELECT * FROM Table_2 WHERE table_1.ID = table_1.ID)
.
El punto es que todo lo anterior son semi uniones que se encuentran muy comúnmente en la naturaleza. Aunque mi preferencia personal es usar EXISTS
(aunque, curiosamente, es la que está más cerca del cálculo relacional), aún necesito poder identificar a los demás como semi uniones; curiosamente, el enfoque más popular (INNER JOIN
más DISTINCT
más no proyección) puede ser el más difícil de identificar.
El código de refacturación con el único propósito de ajustarse al estilo personal está correctamente mal visto: costo de esfuerzo innecesario, aumento de riesgo, implicación para el control de fuente, etc. Aprender a reconocer y respetar las preferencias de los demás es una habilidad importante. refaccionándose una vez solo para poder entenderlo, se pondrá en desventaja.
Por supuesto, en términos relacionales, la respuesta "correcta" es evitar por completo las uniones externas. No existe tal cosa como nulo en el modelo relacional y las combinaciones externas están expresamente diseñadas para producir nulos.
Para sumar 'a' y' b', puede hacer 'a + b' o' b + a'. ¿Cuál es mejor? –
Creo que un RDBMS moderno puede transformar uno a otro y elegir uno que tenga un mejor rendimiento, por lo que no debería importar. –