Já vi muitas pessoas usarem a função COALESCE no lugar de ISNULL. A partir de pesquisas na Internet, descobri que COALESCE é padrão ANSI, portanto, há uma vantagem de sabermos o que esperar ao usá-lo. No entanto, ISNULL parece mais fácil de ler, pois parece mais claro o que está fazendo.
Também percebo que ISNULL é meio complicado, pois atua de maneira diferente em diferentes servidores de banco de dados e em diferentes idiomas.
Tudo isso, na minha opinião, se resume a estilo e padrões. Dado que o estilo é subjetivo, há alguma razão para usar COALESCE em vez de ISNULL (ou vice-versa)? Especificamente, há uma vantagem de desempenho de um sobre o outro?
Então
Finalmente, e a parte divertida. O tipo de dados do resultado e comprimento/precisão/escala
Este último bit é o motivo pelo qual ISNULL geralmente é usado porque é mais previsível (?)
Todos os tipos de dados são iguais, você não verá nenhuma diferença prática ...
COALESCE
é traduzido internamente para umaCASE
expressão,ISNULL
é uma função de mecanismo interno.COALESCE
é uma função padrão ANSI,ISNULL
é T-SQL.As diferenças de desempenho podem surgir e surgem quando a escolha influencia o plano de execução, mas a diferença na velocidade bruta da função é minúscula .
Como Mark apontou, você terá dificuldade em encontrar diferenças de desempenho; Acho que outros fatores serão mais importantes. Para mim, sempre uso COALESCE, e a maior parte disso já foi mencionado por você ou pelo Mark:
Você também deve ter certeza de que está ciente de como a precedência de tipo de dados é tratada usando as duas funções se estiver usando com diferentes tipos/precisões de dados, etc.
Observação
Há uma exceção. Eles são tratados de forma diferente nas versões atuais do SQL Server:
A
COALESCE
variante será executadasome_aggregate_query
duas vezes (uma para verificar o valor e outra para devolvê-lo quando diferente de zero), enquantoISNULL
executará a subconsulta apenas uma vez. Eu falo sobre algumas outras diferenças aqui: