I fixed the problem by updating the query to the below syntax:
TABLE WITHOUT ID
rows.FlattenedNames[0] As "Names",
rows.marriageDate[0] As "Marriage Date", rows.AnniversaryCalc[0] AS "Anniversary"
FROM #person
WHERE marriageDate.month = 03 AND marriageDate.day = 11
FLATTEN join(sort(list(row.file.link,partneredWith)), ", ") AS "FlattenedNames"
FLATTEN truncate(string(date(today) - marriageDate),2, "") AS "AnniversaryCalc"
GROUP BY FlattenedNames
This now correctly only displays one anniversary per couple.
I was massively helped by reading this excellent thread which really helped explain flatten and group by: "Group by" Woes