Kiedy należy stosować krzyżyk nad łączeniem wewnętrznym?

Jaki jest główny cel korzystaniaZASTOSOWANIE KRZYŻOWE?

Przeczytałem (niejasno poprzez posty w Internecie), żecross apply może być bardziej efektywny przy wybieraniu dużych zestawów danych w przypadku partycjonowania. (Paging przychodzi na myśl)

Też to wiemCROSS APPLY nie wymaga UDF jako prawej tabeli.

W większościINNER JOIN zapytań (relacje jeden-do-wielu), mógłbym je przepisać, aby użyćCROSS APPLY, ale zawsze dają mi równoważne plany wykonania.

Czy ktoś może mi dać dobry przykład, kiedyCROSS APPLY robi różnicę w tych przypadkachINNER JOIN będzie również działać?

Edytować:

Oto trywialny przykład, w którym plany wykonania są dokładnie takie same. (Pokaż mi, gdzie się różnią i gdziecross apply jest szybszy / bardziej wydajny)

create table Company (
    companyId int identity(1,1)
,   companyName varchar(100)
,   zipcode varchar(10) 
,   constraint PK_Company primary key (companyId)
)
GO

create table Person (
    personId int identity(1,1)
,   personName varchar(100)
,   companyId int
,   constraint FK_Person_CompanyId foreign key (companyId) references dbo.Company(companyId)
,   constraint PK_Person primary key (personId)
)
GO

insert Company
select 'ABC Company', '19808' union
select 'XYZ Company', '08534' union
select '123 Company', '10016'


insert Person
select 'Alan', 1 union
select 'Bobby', 1 union
select 'Chris', 1 union
select 'Xavier', 2 union
select 'Yoshi', 2 union
select 'Zambrano', 2 union
select 'Player 1', 3 union
select 'Player 2', 3 union
select 'Player 3', 3 


/* using CROSS APPLY */
select *
from Person p
cross apply (
    select *
    from Company c
    where p.companyid = c.companyId
) Czip

/* the equivalent query using INNER JOIN */
select *
from Person p
inner join Company c on p.companyid = c.companyId

questionAnswers(13)

yourAnswerToTheQuestion