The fact that with the Relate option, the virtual table or its contents aren’t visible can be frustrating. I like to be able to see a table and its contents, particularly when creating and testing an app to make sure all works OK. Also if someone unfamiliar with the app starts working on it, the virtual table structure isn’t immediately obvious
Relate is slightly faster when identifying whether a relationship exists. The Relate function uses dot.notation rather than the Filter function so is less complex. It usually doesn’t make a noticeable difference
By default I’d tend to use a custom intersect table. If the number of records in the intersect table is likely to become large, I’d consider switching and creating a direct many to many relationship between the 2 tables instead