Ce titre d’article semble bateau au premier abord mais il me semble essentiel de parler de cette expérience pour le moins « étrange » avec un filtre sur j’ai effectué sur Oracle ces jours-ci.
Le filtre suivant :
1 | WHERE maColonne != 'uneValeur' |
renvoi, contrairement à ce que j’aurai pensé, toutes les lignes de ma table dont la colonne « maColonne » est différente de ‘uneValeur’ (jusque là tout va bien) mais également les lignes où « maColonne » IS NULL !
Et oui il semblerait qu’il faille rajouter
1 | OR maColonne IS NOT NULL |
Exemple :
1 2 3 4 5 6 7 8 9 10 11 12 13 | SELECT * FROM ( SELECT null as maColonne FROM dual UNION SELECT 'uneValeur' FROM dual UNION SELECT 'uneAutreValeur' FROM dual ) where maColonne != 'uneValeur' |
Renvoi une seule ligne alors que
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | SELECT * FROM ( SELECT null as maColonne FROM dual UNION SELECT 'uneValeur' FROM dual UNION SELECT 'uneAutreValeur' FROM dual ) where (maColonne != 'uneValeur' OR maColonne IS NULL) |
renvoi bien deux lignes…