SQL avec un objective inconnu

Je dois modifier certaines requêtes SQL (SQL Server 2005) effectuées par une autre personne et dans ce code je vois souvent la construction suivante:

SELECT fieldA, SUM(CASE fieldB WHEN null THEN 0 ELSE fieldB END) as AliasName FROM ... 

Je ne comprends pas la déclaration de cas car pour autant que je sache, null ne peut pas être vérifié dans un cas et donc je pense que le code ci-dessus fait la même chose que:

 SELECT fieldA, SUM(fieldB) as AliasName FROM ... 

J'ai aussi fait quelques tests et n'ai pas vu de différences dans le résultat. Ai-je oublié quelque chose, ou est-ce que je peux replace la déclaration supérieure par la plus courte?

METTRE À JOUR

Uniquement pour l'exhaustivité car elle n'est pas mentionnée dans les réponses: Le code supérieur renvoie le même résultat que le code inférieur . La construction de case utilisée ne remplace pas les zéro par zéro et peut donc être ignorée. Si le but du sql d'origine était de s'assurer que jamais null ne sera returnné, le coalesce ou le isnull -operator peuvent être utilisés (comme indiqué dans les réponses).

La sortie de votre deuxième instruction contiendra des valeurs nulls (lors de l'agrégation d'loggings qui n'ont que des valeurs null pour fieldB ). Si cela ne vous dérange pas, vous allez bien.

Si vous voulez des zéros dans votre sortie plutôt que null valeurs null , utilisez ceci:

 select fieldA, sum(isnull(fieldB, 0)) as AliasName from ... 

Vous obtiendrez cela plus facilement avec

 SELECT fieldA, COALESCE(fieldB, 0) as AliasName