É importante reconhecer que o SQL é uma linguagem declarativa. A SELECT
consulta que você escreveu especifica os resultados lógicos que devem ser retornados. Cabe ao mecanismo do banco de dados, especificamente o otimizador de consulta, determinar uma estratégia física eficiente para retornar esses resultados.
O plano final de execução física dependerá das habilidades de raciocínio do otimizador, da quantidade de tempo que ele está preparado para gastar no problema, da disponibilidade de métodos de acesso adequados (principalmente índices e visualizações materializadas), informações estatísticas representativas e o caminho de código específico a especificação da consulta passa pelo código de otimização.
Em geral, se o design do seu banco de dados é relacional, você fornece bons métodos de acesso e informações estatísticas precisas e a consulta é bem escrita, o otimizador normalmente encontrará uma estratégia de execução física razoável, sem que você precise se preocupar muito com a forma escrita de a especificação da consulta em excesso.
Sempre haverá casos em que a expressão do mesmo requisito lógico usando sintaxe diferente (mas semanticamente idêntica) afetará o plano de execução físico, mas isso deve ser uma preocupação secundária. Novamente, geralmente, considere expressar a consulta de maneira diferente se as características de tempo de execução forem inaceitáveis, uma vez que todos os princípios mencionados acima tenham sido abordados.
Seria raro ao extremo a ordem escrita de WHERE
predicados de cláusulas conjuntivas simples (como na pergunta) afetar o plano de execução física de qualquer maneira mensurável. Em suma, isso não é algo com que você deva se preocupar. Obtenha o design do banco de dados, índices e informações estatísticas primeiro.
Para responder à pergunta diretamente (eventualmente!), Adicionar uma condição extra redundante pode melhorar o desempenho, mas apenas se ele permitir o uso de um método de acesso mais eficiente - por exemplo, se houver apenas um índice (BitField, VarcharField). Se já houvesse um índice em (VarcharField), ele adicionaria apenas sobrecarga.
Como um detalhe de implementação, não, o SQL Server não considera o custo das comparações, dependendo do tipo de dados ou da complexidade computacional aparente. De fato, há um custo muito baixo e precioso das operações escalares , mas isso leva a um tópico inteiro.
Perguntas relacionadas:
Operadores lógicos OU AND na condição e ordem das condições no WHERE
SQL Server 2008 e expressões constantes
Operadores bit a bit que afetam o desempenho
Comportamento estranho da instrução SQL