I was reading this page about APPLY:
http://sqlblog.com/blogs/alexander_kuznetsov/archive/2009/07/07/using-cross-apply-to-optimize-joins-on-between-conditions.aspx
The second query is faster why you are limiting the scope of the join.
First query: A join B
Second query: A join subset(B)
As subset(B) < B itself there are a lot less matches to scan for.
And that leads to the question: the column used in that join got a index? (Probably not or the speeds cannot differ a lot)