MySQL under what scenario suitable to use WHERE EXISTS
Not a fair test.  Your example is about as close as you can get between using JOIN to using EXISTS.

Also, it probably gave a different result -- What if there are 2 Johns?  The JOIN would count both; the EXISTS would count only once.

EXISTS is a "semi-join".  It is better than JOIN in cases where it can stop short of scanning for all rows that match.  Instead, it stops with the first match.  If there is a useful index, semi-join does not necessarily help much.  If not, it could be a big speed up.

In the past, IN ( SELECT ... ) was notoriously inefficient.  EXISTS (SELECT * ) is often a better choice.

Search around stackoverflow.com for more instances of EXISTS.  I think you will find a variety.