В этом запросе я не понимаю:
Что такое p1.Person и p2.Person

Как указал mcalex, они являются ссылками на таблицы, в этом случае они ссылаются на одну и ту же таблицу дважды, когда она соединяется с собой. Бит Person содержит Имя человека (согласно графику).
Запрос следующий:
SELECT p1.Person AS PERSON, p2.Person AS FRIEND_OF_FRIEND
FROM PersonFriend pf1
JOIN Person p1 ON pf1.PersonID = p1.ID
JOIN PersonFriend pf2 ON pf2.PersonID = pf1.FriendID
JOIN Person p2 ON pf2.FriendID = p2.ID
WHERE p1.Person = "Alice" and pf2.FriendID <> p1.ID
Внимательно изучите каждое упоминание таблицы в предложении FROM . Вы сможете увидеть, что при каждом упоминании назначается сокращение (например, JOIN Person p1). В итоге вы получите следующие сокращенные имена / ссылки: p1 , p2 , pf1 и pf2 . В то время как p1 и p2 ссылаются на таблицу Person , pf1 и pf2 ссылаются на PersonFriend .
При нормальных обстоятельствах , вы можете использовать полное имя таблицы , как Person или PersonFriend в JOINS , но , как Есть несколько самостоятельно присоединяется в этом запросе вам нужен другой способ определить , какие поля из которых конкретного экземпляр таблиц вы имеете в виду.
Редактировать: ссылка, предоставленная mcalex (Использование таблицы дважды в одном запросе), содержит дополнительную информацию о значении самостоятельного объединения.