NOT IN

09/10/2006 - 12:55 por miquel | Informe spam
hola,
tengo 2 tablas:
tabla a) strCiudad (nvarchar(50)
tabla b) strCapital (nvarchar(50)

si hago la consulta
select strCiudad from tablaA where strCiudad in (select strCapital from
tablaB)
funciona, y devuelve solo aquellas ciudades que estan en A y en B

Pero si hago
select strCiudad from tablaA where strCiudad NOT IN (select strCapital from
tablaB)
deberia devolverme aquellas ciudades que no están en B pero no me devuelve
ningun registro (y los hay!!!)

Hago algo mal?
uso SQL2000 con SP3

Muchas gracias.

Preguntas similare

Leer las respuestas

#6 Alejandro Mesa
09/10/2006 - 22:53 | Informe spam
Miguel,

Esa es una de las razones por la cual no usar el operador "not in". Como la
lista continene valores NULL, entonces la expresion no se evalua y por tanto
no devuelve el resultasdo.

Ejemplo:

select *
from
(
select 1 as c1
) as t1
where
c1 not in (
select t2.c1
from (select cast(null as int) as c1) as t2
)
go

Pereferible que uses el operador "not exists".

Ejemplo:

select *
from
(
select 1 as c1
) as t1
where
not exists (
select *
from (select cast(null as int) as c1) as t2
where t2.c1 = t1.c1
)
go

Si aplicamos esto a tu sentencia:

select *
from tblA as a
where NOT exists (
select *
from tblB as b
where b.strCapital = a.strCiutat
)
go


AMB

"miquel" wrote:

Hola,

No entiendo el porqué pero para que me funcione tengo que hacer
select * from tblA where strCiutat NOT IN (select strCapital from tblB where
strCapital is not null)

La verdad es que tblB contiene un registro para el que strCapital = null

Saludos

"Salvador Ramos" escribió en el
mensaje news:%
> Hola,
>
> Podrías postear el DDL de esas tablas ?
>
> Un saludo
> Salvador Ramos
> Murcia - España
>
> [Microsoft MVP SQL Server]
> www.helpdna.net (información sobre SQL Server y .NET)
>
>
> "miquel" escribió en el mensaje
> news:
>> hola,
>> tengo 2 tablas:
>> tabla a) strCiudad (nvarchar(50)
>> tabla b) strCapital (nvarchar(50)
>>
>> si hago la consulta
>> select strCiudad from tablaA where strCiudad in (select strCapital from
>> tablaB)
>> funciona, y devuelve solo aquellas ciudades que estan en A y en B
>>
>> Pero si hago
>> select strCiudad from tablaA where strCiudad NOT IN (select strCapital
>> from tablaB)
>> deberia devolverme aquellas ciudades que no están en B pero no me
>> devuelve ningun registro (y los hay!!!)
>>
>> Hago algo mal?
>> uso SQL2000 con SP3
>>
>> Muchas gracias.
>>
>>
>>
>
>



email Siga el debate Respuesta Responder a este mensaje
Ads by Google
Help Hacer una pregunta AnteriorRespuesta Tengo una respuesta
Search Busqueda sugerida