Référez-requête suivante:requête T-SQL avec des agrégats de retour d'un jeu de résultats non vide lorsque le prédicat est faux
SELECT SUM(n) AS SUMVAL FROM (values(3),(4)) AS tbl(n) WHERE 1=0
Depuis que je suis fournirai un prédicat qui est faux, je l'aurais pris pour retourner une jeu de résultats vide (0 lignes). Mais il renvoie une ligne avec NULL. Est-ce un bug? Ou existe-t-il une explication valable pour ce comportement?
Si je supprime la fonction d'agrégation, je reçois un jeu de résultats vide comme prévu:
SELECT n AS VAL FROM (values(3),(4)) AS tbl(n) WHERE 1=0
Et juste pour préciser, si je retire le faux prédicat, la requête retourne 2 lignes avec des valeurs 3 et 4 pour la colonne 'VAL'
SELECT n AS VAL FROM (values(3),(4)) AS tbl(n)
Mais si j'utilise des fonctions d'agrégation avec clause GROUP BY, comme indiqué dans la requête ci-dessous, je me résultat escompté (vide rowset)
SELECT id, SUM(n) AS SUMVAL FROM (values(1,3.0),(2,4.0)) AS tbl(id,n) WHERE 1=0 GROUP BY id