I've never examined the results of explain before but looking at the results you got and checking against the info on your link, two things imediately stand out:-
1. The link says that Type is the all important column and gives a list of which types are prefereble. In your results the join has an all and a ref, the 'in' has an all and an index. a ref is prefereable to an index so that's one reason it's faster.
2. Look at the row count being processed. The join processes 1 and 5545, the 'in' processes 5530 and 5565. As it's a subquery I suspect you should actually multiply those two numbers to get a meaningful indication of performance, which means the 'in' would be something like 5000 time less efficient! I suspect that lots of other factors come into play meaning you won't see anything like that much difference but it's not a good starting point.



That's about 8 times slower
I'm surprised it makes that much difference . I don't suppose your in a position to test out what a 'not exists' would do are you?