sous-requête avec not null
Bonjour à tous,
J'ai une requête très simple dont je ne comprends pas le résultat: j'ai 2 tables, la première "extrait" contient environ 5.000 lignes. La 2ème "total" contient environ 7 millions de lignes, dont 1.7 million non nulles. Les 2 sont liées par leur champs "ID", clé primaire dans extrait, champs classique chez total. Pour info, je sais que 10 extrait.id ne sont pas dans total.
Je veux juste voir parmi "extrait" les clés que je ne trouve pas dans total, j'ai donc tout simplement écrit:
Code:
1 2 3 4 5
|
select e.*
from extrait e
where e.ID not in (
select t.ID from total t) |
Mais cela ne fonctionne pas!! ça ne me renvoie aucun résultat! Pour avoir le bon résultat, je dois rajouter une clause not null à la sous-requête:
Code:
1 2 3 4 5 6
|
select e.*
from extrait e
where e.ID not in (
select t.ID from total t
where t.ID is not null) |
Je ne comprends pas du tout en quoi cette clause change quelque chose!! Quelqu'un a un explication?
Pour info, les deux requêtes suivantes me donnent les bons résultats:
Code:
1 2 3 4 5 6 7 8 9 10 11 12
|
select e.*
from extrait e
left outer join total t on t.ID = e.ID
where t.ID is null
-- >> je trouve les 10 résultats attendus
select e.*
from extrait e
where not exists (select null from total t where t.ID = e.ID)
-- >> je trouve les 10 résultats attendus |
Merci à tous