Pergunta 1:
select count(UserID)
from users
where UserID IN (select UserID from otherTable)
Devoluções: 178
Consulta 2: : (simplesmente alterado IN
para NOT IN
)
select count(UserID)
from users
where UserID NOT IN (select UserID from otherTable)
Devoluções: 0
Consulta 3: (remova a cláusula IN completamente)
select count(UserID)
from users
Retornos: 1047123
(mais de um milhão)
O que? Eu não posso... Mesmo...
A única explicação que tenho é meu banco de dados inconsistente/corrompido, tenho que rodar DBCC CHECKDB ou algo assim.
PS. UserID
é uma chave primária, então - sem enganos.
NOT IN
não avaliarátrue
quando um ou maisNULL
valores forem retornados pela subconsulta.Use
NOT EXISTS
para evitar essa pegadinha comum. Veja esta resposta para obter mais informações e links para informações mais detalhadas.