Un poco tarde mi agradecimiento por las respuestas.
Alvaro, como siempre, muy claro y conciso.
Es como vos decís es extraño y a mi entender no muy lógico a primera vista,
no sabía de ese estándar, viéndolo en ejemplos concretos podríamos decir
que:
4 not in (1, 2, 5, null)
no es verdadero!

Es así?

Guillermo Villanueva




El 10 de julio de 2012 11:07, Alvaro Herrera <alvhe...@alvh.no-ip.org>escribió:

>
> Excerpts from Guillermo Villanueva's message of lun jul 09 13:06:37 -0400
> 2012:
>
> > Controlando que dentro y fuera  de la subconsulta la clavebeneficiario
> sea
> > no nula, la consulta devuelve lo que esperaba.
>
> > Porque? es el comportamiento normal?
>
> Es extraño la primera vez que lo ves, pero la explicación es que la
> lógica booleana de tres valores exige que sea así:
>
> http://www.postgresql.org/docs/9.1/static/functions-subquery.html
> Mira 9.20.3 NOT IN.  Dice:
>         Note that if the left-hand expression yields null, or if there
>         are no equal right-hand values and at least one right-hand row
>         yields null, the result of the NOT IN construct will be null,
>         not true.
>
> traduzco:
> "si la expresión a la izquierda retorna nulo, o si no hay valores
> iguales a la derecha y al menos uno de los valores de la derecha es
> nulo, el resultado del NOT IN es nulo, no verdadero"
>
>         This is in accordance with SQL's normal rules for
>         Boolean combinations of null values.
>
>
> Puede ser más simple conceptualmente reformular la consulta usando NOT
> EXISTS.
>
> --
> Álvaro Herrera <alvhe...@alvh.no-ip.org>
>

Responder a