No, for first query you are creating 4 GUIDs due to CROSS APPLY.When running second query, there is no real relationship between the data.Having that said we can investigate the execution plans.And yes, they are completely different! Green are same, red are differentFirst query |--Compute Scalar(DEFINE:([Expr1003]=newid(), [Expr1020]=[Expr1020])) |--Nested Loops(Inner Join) |--Nested Loops(Inner Join, OUTER REFERENCES:(XML Reader with XPath filter.[id])) | |--Filter(WHERE:(STARTUP EXPR([@myXml] IS NOT NULL))) | | |--Table-valued function | |--Stream Aggregate(DEFINE:([Expr1020]=MIN(CASE WHEN [@myXml] IS NULL THEN NULL ELSE CASE WHEN datalength([Expr1017])>=(128) THEN CONVERT_IMPLICIT(nvarchar(max),[Expr1018],0) ELSE CONVERT_IMPLICIT(nvarchar(max),[Expr1017],0) END END))) | |--UDX((XML Reader.[id], XML Reader.[nid], XML Reader.[tid], XML Reader.[value], XML Reader.[lvalue], XML Reader.[lvaluebin], [Expr1011], XML Reader.[id])) | |--Compute Scalar(DEFINE:([Expr1011]=0x58)) | |--Nested Loops(Inner Join, OUTER REFERENCES:(XML Reader.[id], [Expr1023])) | |--Compute Scalar(DEFINE:([Expr1023]=getdescendantlimit(XML Reader.[id]))) | | |--Table-valued function | |--Table-valued function |--Row Count Spool |--Clustered Index Seek(OBJECT:([AdventureWorks].[Production].[ProductModel].[PK_ProductModel_ProductModelID]), SEEK:([AdventureWorks].[Production].[ProductModel].[ProductModelID]=(7) OR [AdventureWorks].[Production].[ProductModel].[ProductModelID]=(8)) ORDERED FORWARD)
Second query |--Compute Scalar(DEFINE:([Expr1019]=[Expr1019])) |--Nested Loops(Inner Join) |--Merge Join(Union) | |--Compute Scalar(DEFINE:([Expr1000]=newid())) | | |--Constant Scan | |--Compute Scalar(DEFINE:([Expr1001]=newid())) | |--Constant Scan |--Nested Loops(Inner Join, OUTER REFERENCES:(XML Reader with XPath filter.[id])) |--Filter(WHERE:(STARTUP EXPR([@myXml] IS NOT NULL))) | |--Table-valued function |--Stream Aggregate(DEFINE:([Expr1019]=MIN(CASE WHEN [@myXml] IS NULL THEN NULL ELSE CASE WHEN datalength([Expr1016])>=(128) THEN CONVERT_IMPLICIT(nvarchar(max),[Expr1017],0) ELSE CONVERT_IMPLICIT(nvarchar(max),[Expr1016],0) END END))) |--UDX((XML Reader.[id], XML Reader.[nid], XML Reader.[tid], XML Reader.[value], XML Reader.[lvalue], XML Reader.[lvaluebin], [Expr1010], XML Reader.[id])) |--Compute Scalar(DEFINE:([Expr1010]=0x58)) |--Nested Loops(Inner Join, OUTER REFERENCES:(XML Reader.[id], [Expr1022])) |--Compute Scalar(DEFINE:([Expr1022]=getdescendantlimit(XML Reader.[id]))) | |--Table-valued function |--Table-valued function