SQL - not in con null

 
Vista:

not in con null

Publicado por Fernando (1 intervención) el 05/10/2002 17:51:25
Hago en un entorno Oracle (desde SQL*Plus) las siguientes consultas
sobre una tabla T (la PK de la tabla es COD_1 y el
campo COD_2 que puede ser NULL tiene una FK con COD_1):
SQL>select count(*)
2 from T;
COUNT(*)
----------
947410
SQL>select count(*)
2 from T where cod_1 in
3 (select cod_2 from T)
4 /
COUNT(*)
----------
240020
SQL>select count(*)
2 from T where cod_1 not in
3 (select cod_2 from T)
4 /
COUNT(*)
----------
0
Me extraña el resultado de la última select (pienso
que me debería dar 947410-240020=707390).
Por lo visto el problema es que como "cod_2"
puede ser null, para que salga el resultado correcto
hay que hacer:
SQL>select count(*)
2 from T where cod_1 not in
3 (select cod_2 from T
where cod_2 is not null)
4 /
COUNT(*)
----------
707390
que efectivamente está bien, ¿qué es lo que pasa? Yo
pensaba que el resultado de ver si el "cod_1" está
en la subselect es independiente de que el resultado
de la subselect haya o no nulos.
Luego pensé que a lo mejor el problema es que el
operador "in" no admite que el conjunto en el que mira
haya nulos (igual que no puedo usar los operadores "="
y "<>" con null), pero mi gozo en un pozo porque si
hago
SQL>select count(*)
2 from T where cod_1 in
3 (select cod_2 from T
where cod_2 is not null)
4 /
COUNT(*)
----------
240020
que es el mismo resultado de la 2ª select.
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder