Este es uno de los conceptos más desafiantes que tuve que aprender cuando comencé a trabajar con SQL.
No me avergüenza confesar que me tomó algo de tiempo asimilar la forma en que SQL Server procesa su código y esto se debe a que SQL Server no procesa el código de arriba para abajo (como la mayoría de los lenguajes de programación).
Soy un DBA por Accidente, por lo que esperaba que SQL Server procesara el código como lo hacen otros lenguajes de programación.
El “keyed-in order"
Este es el orden en el que se supone que debes escribir las cláusulas de consulta. Por favor ver más abajo.
Fases lógicas para El procesamiento de consultas
Aquí es donde comienza la diversión y esto es porque el orden de procesamiento de la consulta es diferente. Comienza con la cláusula FROM.
Aquí está la misma consulta basada en el "orden lógico":
Cada fase opera en una o más tablas como entradas y devuelve una tabla virtual como salida.
La tabla de salida de una fase es la entrada a la siguiente fase.
El último paso devuelve el resultado final de la consulta.
Si aprendez de forma visual como yo, dale una mirada a el diagrama de flujo de Itzik Ben-Gan para "Logical Query Processing".
Ejemplos:
Un error común es tratar de usar un ALIAS en la cláusula WHERE, esto generará un error porque la cláusula SELECT se evalúa después de una cláusula WHERE, por lo que la cláusula WHERE no conoce el alias de la columna.
Por otro lado, podemos usar ALIAS en la cláusula ORDER BY ya que se evalúa después de la cláusula SELECT.
Usando un poco de todo basado en las siguientes reglas:
GROUP BY se procesa antes de el SELECT (no podemos usar el alias aquí)
HAVING se procesa antes de elSELECT (no podemos usar el alias aquí, pero podemos usar COUNT)
ORDEN BY se procesa después de elSELECT (podemos usar el alias aquí)
¡Diviértanse aprendiendo!