ALL
делает именно то, что говорит.Он сравнивает A.age
с каждым значением, возвращаемым запросом.Фильтр проходит, если A.age
больше, чем все значения B.age
.
Нет значений, так что это правда.
Вы путаете пустой набор результатов с результатомнабор, в котором есть строка с NULL
.Это разные вещи.
Между прочим, я обычно пишу эту логику как:
select *
from A
where A.Age > (select max(B.Age) from B where B.Name = 'Arun');
В этом случае сравнение не является набором;сравнение со скалярным значением.И скалярное значение равно NULL
, потому что подзапрос не возвращает строк.Таким образом, это не возвращает строк в этой ситуации.Результаты совпадают, когда ваш подзапрос возвращает любые строки.