Sqlserver
 sql >> Base de Dados >  >> RDS >> Sqlserver

Ordem de execução das instruções do SQL Server


Este é um "recurso" conhecido do SQL Server. Nunca assuma que a cláusula WHERE é executada antes da cláusula SELECT.

Consulte:SQL Server deve não levantar erros ilógicos

Há realmente boas razões para fazer isso às vezes. Considere juntar duas tabelas, com A sendo muito menor que B.
select CAST(A.col1 as int), A.col2, B.col3
from A join B ...
where ... isnumeric(A.col1) = 1

Se você inspecionar o plano de consulta gerado, com ou sem razão, o SQL Server transmitirá os dados de A como as linhas principais para unir em B. Ao fazer isso, ele sabe que só precisa extrair col2 e function on col1 . Poderia trazer col1 apenas para executar a função mais tarde, ou para algo tão trivial quanto CAST, o SQL Server também pode transformar os dados durante o processo de streaming.

Uma coisa é certa, essa estratégia torna o SQL Server um pouco mais rápido em determinadas consultas. Mas em uma perspectiva puramente lógica, eu chamaria isso de bug.