incidencias de NULL con NOT IN fue:(Re: [pgsql-es-ayuda] Bajo rendimiento en postgresql cuando se lanza un delete)

From: Jaime Casanova <jcasanov(at)systemguards(dot)com(dot)ec>
To: Edwin Quijada <listas_quijada(at)hotmail(dot)com>
Cc: alvherre(at)alvh(dot)no-ip(dot)org, fquintana(at)itccanarias(dot)org, pgsql-es-ayuda(at)postgresql(dot)org
Subject: incidencias de NULL con NOT IN fue:(Re: [pgsql-es-ayuda] Bajo rendimiento en postgresql cuando se lanza un delete)
Date: 2009-08-01 18:24:11
Message-ID: 3073cc9b0908011124k1f11f236pa0bc515425f214c6@mail.gmail.com
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-es-ayuda

2009/7/30 Edwin Quijada <listas_quijada(at)hotmail(dot)com>:
>
>> De ser así, ¿has leído respecto de las implicancias que tienen los
>> valores NULL en cláusulas NOT IN?
>>
>
> El no se pero a mi me gustaria saber que implicaciones tienen los NULL en clausulas NOT IN , donde puedo ver eso?
>

postgres=# select current_date where 1 not in (select 2);
date
------------
2009-08-01
(1 row)

postgres=# select current_date where 1 not in (select 2 union select null);
date
------
(0 rows)

La razon siempre se la atribuye al estandar aunque no se en que parte
del estandar esta eso...
en todo caso, este ejemplo nos permite hacernos una idea:

-- en este caso el resultado es true, 1 *definitivamente*
-- esta en el conjunto de resultados de la subconsulta
postgres=# select 1 in (select 1 union select 2 union select null);
?column?
----------
t
(1 row)

-- en este caso el 1 no forma parte del conjunto de resultados...
-- pero como NULL es deconocido o indeterminado no puedo decir a
ciencia cierta que *no es* 1
-- imagino que es bajo esa premisa que el resultado aqui es NULL en
lugar de false
postgres=# select 1 in (select 2 union select null);
?column?
----------

(1 row)

-- siendo que en el ejemplo anterior el resultado es NULL, y la
negacion de NULL es NULL
-- al negar la expresion anterior obtengo otra vez NULL
-- segun el estandar: "The expression RVC NOT IN IPV is equivalent to
NOT ( RVC IN IPV )

postgres=# select not (1 in (select 2 union select null));
?column?
----------

(1 row)

--
Atentamente,
Jaime Casanova
Soporte y capacitación de PostgreSQL
Asesoría y desarrollo de sistemas
Guayaquil - Ecuador
Cel. +59387171157

Browse pgsql-es-ayuda by date

  From Date Subject
Next Message jines jines 2009-08-02 03:28:09 Consulta Tsearch
Previous Message Ernesto Lozano 2009-08-01 13:50:53 Re: [pgsql-es-ayuda] Re: Acerca de PGDay 2009 Buenos Aires participación comunidad cubana confirmación