s1 and s2 are table aliases, in this case both for the same table 'peoplematchesheroes'. s1 is used as the alias for the outer query, and s2 for the inner correlated subquery.
It's not necessary to use a table alias for a correlated subquery, but in your case, since your inner query is also referring to the same table as the outer query, you need to alias them. Think of it as a resolution of scope, because otherwise it would be impossible to tell which 'personforeignkey' field you are referring to- the one from the table correlated subquery or from the outer one.
Hope this makes sense.