Es difícil saber exactamente qué pensaban los diseñadores del lenguaje SQL cuando escribieron el estándar, pero esta es mi opinión.
SQL, como regla general, requiere que indique explícitamente sus expectativas y su intención. El lenguaje no intenta "adivina lo que querías decir", y completa automáticamente los espacios en blanco. Esto es bueno.
Al escribir una consulta, la consideración más importante es que arroja los resultados correctos. Si cometió un error, probablemente sea mejor que el analizador SQL lo informe, en lugar de adivinar su intención y devolver resultados que pueden no ser correctos. La naturaleza declarativa de SQL (donde usted declara lo que desea recuperar en lugar de los pasos de cómo recuperarlo) ya facilita la inadvertencia de cometer errores. Introducir fuzziniess en la sintaxis del lenguaje no lo haría mejor.
De hecho, cada caso que puedo pensar en donde el lenguaje permite accesos directos ha causado problemas. Tome, por ejemplo, uniones naturales, donde puede omitir los nombres de las columnas a las que desea unirse y permitir que la base de datos las infiera en función de los nombres de las columnas. Una vez que los nombres de las columnas cambian (como lo hacen naturalmente en el tiempo) - la semántica de las consultas existentes cambia con ellos. Esto es malo ... muy malo - realmente no desea que este tipo de magia ocurra entre bastidores en su código de base de datos.
Una consecuencia de esta elección de diseño, sin embargo, es que SQL es un lenguaje detallado en el que debe expresar explícitamente su intención. Esto puede dar como resultado tener que escribir más código del que le gustaría, y quejarse de por qué ciertos constructos son tan detallados ... pero al final del día, es lo que es.
Relacionados http://stackoverflow.com/questions/416625/why-does-sql-force-me-to-repeat-all-non-aggregated-fields-from-my-select-clause-i –
Ah - es un duplicado Cerraré esta pregunta. – SqlRyan
Its a multicate: http://stackoverflow.com/questions/2311034/is-sql-group-by-a-design-flaw – cindi