У вас есть два отдельных совпадения в вашем запросе. Первый находит всех друзей Адама, для которых есть только один: Pernilla.
Второй MATCH находит друзей этого друга (Pernilla), и есть два узла, связанных: отношения FRIEND: Адам (это будет проходить отношения, которые вы изначально использовали, чтобы получить от Адама до Перниллы) и Дэвида.
Если вы вместо этого использовали один МАТЧ для этого:
MATCH (user:User { name: 'Adam' })-[:FRIEND]-(friend)-[:FRIEND]-(friend_of_a_friend)
RETURN friend_of_a_friend.name AS fofName
или
MATCH (user:User { name: 'Adam' })-[:FRIEND]-(friend), (friend)-[:FRIEND]-(friend_of_a_friend)
RETURN friend_of_a_friend.name AS fofName
тогда ты вернешь Дэвида только как друга друга. Причина в том, что уникальность Cypher заключается в том, что для каждого пути в MATCH отношения могут быть пройдены только один раз. Когда есть два МАТЧа, тогда нет никаких ограничений между пройденными между ними отношениями.
Это более подробно проиллюстрировано в документации Cypher по уникальности .