Como Mark señaló, será difícil encontrar diferencias de rendimiento; Creo que otros factores serán más importantes. Para mí, siempre uso COALESCE, y la mayoría de esto ya ha sido mencionado por usted o Mark:
- COALESCE es el estándar ANSI. Es una cosa menos de la que me tengo que preocupar si voy a portar mi código. Para mí, personalmente, esto no es tan importante, porque sé cuán infrecuentemente tales puertos ocurren realmente fuera del mundo del aula de Celko, pero para algunas personas esto es un beneficio.
- Al contrario de lo que dijo sobre la legibilidad, creo que puede ser más difícil leer ISNULL, especialmente para los usuarios que vienen de otros idiomas o plataformas donde ISNULL devuelve un valor booleano (que no existe en SQL Server). Por supuesto, COALESCE es más difícil de deletrear, pero al menos no conduce a suposiciones incorrectas.
- COALESCE es mucho más flexible, como puedo decir COALESCE (a, b, c, d) mientras que con ISNULL tendría que anidar mucho para lograr lo mismo.
También debe asegurarse de saber cómo se maneja la precedencia de tipo de datos utilizando las dos funciones si lo está utilizando con diferentes tipos de datos / precisiones, etc.
Nota
Hay una excepción Estos se manejan de manera diferente en las versiones actuales de SQL Server:
SELECT COALESCE((SELECT some_aggregate_query),0);
SELECT ISNULL((SELECT some_aggregate_query),0);
La COALESCE
variante se ejecutará some_aggregate_query
dos veces (una para verificar el valor y otra para devolverlo cuando no sea cero), mientras ISNULL
que solo ejecutará la subconsulta una vez. Hablo de algunas otras diferencias aquí:
COALESCE
se evalúe dos veces.