Eu herdei uma tabela que possui valores NULL para float
campos, em vez de um valor 0. Estou fazendo alguns testes básicos para consulta e, em meus testes, ambos ISNULL()
apresentam COALESCE()
a mesma saída precisa. Em meus testes (uma tabela com cerca de 5 mil registros), a diferença de tempo também é muito insignificante.
A pergunta está com o exemplo DDL abaixo, há um benefício para usar ISNULL()
ou COALESCE()
vice-versa? Existem circunstâncias que ainda não vi que possam fornecer um cálculo impreciso?
Create Table #Test
(
blue float
,red float
,green float
)
Insert Into #Test VALUES
('14', NULL, '12')
,(NULL, '12', '10')
,(NULL, NULL, '8')
,('10', '2', NULL)
Select
ISNULL(blue,0)+ISNULL(red,0)+ISNULL(green,0)
FROM #Test
SELECT
COALESCE(blue,0)+COALESCE(red,0)+COALESCE(green,0)
FROM #Test
COALESCE pode levar uma lista inteira de valores para verificar NULL onde ISNULL leva um valor de verificação e exigiria aninhamento para verificar mais valores.
vs
Como seu caso está usando valores flutuantes, não deve haver diferença nos resultados dos cálculos. O único benefício que posso realmente ver é a legibilidade do código e a minimização da quantidade de aninhamento necessária.