Почему, если внутри CROSS APPLY есть агрегат, то он работает, как OUTER APPLY

Для примера, есть простая таблица с данными:

CREATE TABLE tbl (
id int,
num int 
) 
GO
INSERT INTO tbl
VALUES  
    (1,1000)
   ,(2,1000)
   ,(3,2000)
   ,(4,2000)
   ,(5,3000)
   ,(6,3000)

Тут CROSS APPLY работает верно:

select *
from tbl t1
CROSS APPLY (select top 1 id from tbl t2 where t1.num = -1 order by id asc) apply_min

введите сюда описание изображения

Но когда я пытаюсь то же самое сделать через агрегатную функцию, то CROSS APLLY работает, как OUTER. Почему?

select *
from tbl t1
CROSS APPLY (select min(id) min from tbl t2 where t1.num = -1) apply_min

введите сюда описание изображения


Ответы (1 шт):

Автор решения: Sergey Moiseenko

В первом случае подзапрос не возвращает строк, а во втором - возвращает (NULL).

→ Ссылка