I’ve had similar experiences with both approaches, and here’s my take: if your right-side logic is relatively static, like joining two tables with defined keys, then an INNER JOIN works perfectly fine. But when things get more dynamic, like when you need to pull in data that changes per row (like a filtered TOP 1 or a custom function), SQL CROSS APPLY offers far more flexibility. Performance-wise, they might be pretty similar for simple queries, but once you introduce more dynamic logic, SQL CROSS APPLY really stands out in terms of execution clarity. Plus, in complex scenarios, it often performs better. It just makes everything more streamlined and efficient.