El estándar ANSI SQL define (capítulo 6.5, especificación de la función de conjunto) el siguiente comportamiento para funciones agregadas en conjuntos de resultados vacíos:
COUNT(...) = 0
AVG(...) = NULL
MIN(...) = NULL
MAX(...) = NULL
SUM(...) = NULL
Devolver NULL para AVG, MIN y MAX tiene mucho sentido, ya que el promedio, mínimo y máximo de un conjunto vacío no está definido.
El último, sin embargo, que me molesta: Matemáticamente, la suma de un conjunto vacío está bien definido: 0
. Usando 0, el elemento neutral de suma, como el caso base hace que todo sea consistente
SUM({}) = 0 = 0
SUM({5}) = 5 = 0 + 5
SUM({5, 3}) = 8 = 0 + 5 + 3
SUM({5, NULL}) = NULL = 0 + 5 + NULL
Definir SUM({})
como null
básicamente hace que "sin filas" sea un caso especial que no encaja con los demás:
SUM({}) = NULL = NULL
SUM({5}) = 5 != NULL + 5 (= NULL)
SUM({5, 3}) = 8 != NULL + 5 + 3 (= NULL)
¿Hay alguna ventaja obvia de la elección que se hizo (SUM siendo NULL) que me he perdido?