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> >