Prenons l'exemple du EMP
tableau dans ce lien.
Plus précisément cette requête -
SELECT e1.empno, e1.sal
FROM emp e1
WHERE e1.sal > ANY (SELECT e2.sal
FROM emp e2
WHERE e2.deptno = 20);
Dans le cas de TOUT, la question que vous posez est "Est-ce que mon salaire est supérieur à celui de n'importe qui dans le département 20 (au moins 1 personne)". Cela signifie que vous espérez au moins un personne a un salaire inférieur à vous. Lorsqu'il n'y a pas de lignes, cela renvoie FALSE
parce qu'il n'y a personne dont le salaire est inférieur à vous, vous en espériez au moins un.
En cas de TOUS, la question évidente que vous vous posez est "Est-ce que mon salaire est supérieur à celui de tout le monde?". Reformuler cela comme "Y a-t-il personne qui a un salaire supérieur à moi ?" Lorsqu'aucune ligne n'est renvoyée, votre réponse est TRUE
, car "il n'y a en effet personne dont le salaire est supérieur à moi.