sql >> Base de Datos >  >> RDS >> Sqlserver

¿Las consultas ANSI JOIN vs. no ANSI JOIN funcionarán de manera diferente?

Las dos consultas son iguales, excepto que la segunda es la sintaxis SQL ANSI-92 y la primera es la sintaxis SQL más antigua que no incorporaba la cláusula de combinación. Deben producir exactamente el mismo plan de consulta interno, aunque es posible que desee comprobarlo.

Debe usar la sintaxis ANSI-92 por varias razones

  • El uso de la cláusula JOIN separa la lógica de la relación de la lógica del filtro (el DONDE) y, por lo tanto, es más limpia y fácil de entender.
  • No importa con esta consulta en particular, pero hay algunas circunstancias en las que la sintaxis de unión externa anterior (usando + ) es ambigua y los resultados de la consulta dependen, por lo tanto, de la implementación, o la consulta no se puede resolver en absoluto. Estos no ocurren con ANSI-92
  • Es una buena práctica ya que la mayoría de los desarrolladores y administradores de bases de datos utilizan ANSI-92 hoy en día y usted debe seguir el estándar. Ciertamente, todas las herramientas de consulta modernas generarán ANSI-92.
  • Como señaló @gbn, tiende a evitar uniones cruzadas accidentales.

Yo mismo me resistí a ANSI-92 durante algún tiempo, ya que hay una ligera ventaja conceptual en la sintaxis anterior, ya que es más fácil imaginar el SQL como una unión cartesiana masiva de todas las tablas utilizadas seguida de una operación de filtrado, una técnica mental que puede ser útil. para comprender lo que está haciendo una consulta SQL. Sin embargo, hace unos años decidí que necesitaba adaptarme a los tiempos y, después de un período de ajuste relativamente corto, ahora lo prefiero, principalmente por la primera razón mencionada anteriormente. El único lugar donde uno debe apartarse de la sintaxis ANSI-92, o más bien no usar la opción, es con uniones naturales que son implícitamente peligrosas.