entiendo por quénull + 1
o (1 + null
) devuelve null
: null
significa "valor desconocido", y si un valor es desconocido, su sucesor es desconocida también. Lo mismo es cierto para la mayoría de las otras operaciones que implican nula [*]¿Por qué SUM (...) en un conjunto de registros vacío devuelve NULL en lugar de 0?
Sin embargo, yo no entiendo por qué ocurre lo siguiente:.
SELECT SUM(someNotNullableIntegerField) FROM someTable WHERE 1=0
Esta consulta devuelve null
. ¿Por qué? ¡Aquí no hay valores desconocidos! La cláusula WHERE devuelve cero registros, y la suma de un conjunto vacío de valores es 0
. [**] Tenga en cuenta que el conjunto no es desconocida , es conocido por ser vacío.
sé que puedo evitar este comportamiento mediante el uso ISNULL
o COALESCE
, pero estoy tratando de entender por qué este comportamiento, que parece contrario a la intuición para mí, fue elegido.
¿Alguna idea de por qué esto tiene sentido?
[*] con algunas excepciones notables, como null OR true
, donde obviamente true
es el resultado correcto ya que el valor desconocido, simplemente no importa.
[**] al igual que el producto de un conjunto de valores vacío es 1
. Matemáticamente hablando, si tuviera que extender $ (Z, +) $ a $ (Z union {null}, +) $, la opción obvia para el elemento de identidad sería 0
, no null
, ya que x + 0 = x
pero x + null = null
.
Quizás porque está utilizando un agregado. – Kermit
Cuando no agrega nada, no obtiene 0, no obtiene nada. –
¿Has mirado el plan de ejecución? – Kermit