Lo standard ANSI SQL definisce (capitolo 6.5, specifica della funzione set) il seguente comportamento per le funzioni aggregate su set di risultati vuoti:
COUNT(...) = 0
AVG(...) = NULL
MIN(...) = NULL
MAX(...) = NULL
SUM(...) = NULL
Restituire NULL per AVG, MIN e MAX ha perfettamente senso, poiché la media, il minimo e il massimo di un set vuoto non sono definiti.
L'ultimo, tuttavia, fastidi me: Matematicamente, la somma di un insieme vuoto è ben definita: 0
. Usando 0, l' elemento neutro dell'aggiunta, come il caso base rende tutto coerente:
SUM({}) = 0 = 0
SUM({5}) = 5 = 0 + 5
SUM({5, 3}) = 8 = 0 + 5 + 3
SUM({5, NULL}) = NULL = 0 + 5 + NULL
La definizione SUM({})
come null
fondamentalmente rende "senza righe" un caso speciale che non si adatta agli altri:
SUM({}) = NULL = NULL
SUM({5}) = 5 != NULL + 5 (= NULL)
SUM({5, 3}) = 8 != NULL + 5 + 3 (= NULL)
C'è qualche ovvio vantaggio della scelta fatta (SUM essendo NULL) che mi sono perso?