When should you choose SQL CROSS APPLY over an INNER JOIN, and how do their performance and behavior differ?

While INNER JOIN and SQL CROSS APPLY often produce identical results and execution plans in simple queries, CROSS APPLY shines when the right-side expression depends on columns from the left-side table—especially with table-valued functions or subqueries. Are there scenarios where SQL CROSS APPLY performs better or offers more flexibility than a traditional join?