Você não pode contar com a ordem em que um banco de dados avaliará as expressões de filtragem. Existe um otimizador de consulta que avaliará seu SQL e criará um plano para executar a consulta com base no que ele percebe que produzirá o melhor desempenho .
Neste contexto,
IsNumeric()
não pode ser usado com um índice e significa executar uma função em cada linha da tabela. Portanto, quase nunca fornecer o melhor desempenho percebido. Compare isso com o SrcID > 15
expressão, que pode ser correspondida com um índice (se houver), e é apenas uma única expressão de operador, mesmo que não exista. Ele também pode ser usado para filtrar o número de linhas potenciais onde o IsNumeric()
função precisa ser executada. Você provavelmente pode contornar isso com uma exibição, uma subconsulta, um CTE, uma instrução CASE ou uma coluna computada. Veja um exemplo de CTE:
With NumericOnly As
(
SELECT <columns> FROM MyTable WHERE IsNumeric(SrcID) = 1
)
SELECT <columns> FROM NumericOnly WHERE SrcID > 15
E aqui está uma opção de instrução CASE:
SELECT <columns> FROM MyTable WHERE CASE WHEN IsNumeric(SrcIC) = 1 THEN Cast(SrcID As Int) ELSE 0 END > 15