When SQL joins grow complex due to multi-level relationships, many-to-many fan-out, or unreliable pagination counts, a graph traversal approach can be a better fit. The key signal is reaching for DISTINCT as a reflex to fix bugs. Graph queries offer expressiveness and honest pagination by collecting distinct root nodes by design, but they come with costs: a new mental model for the team, the need for integration tests against real data, and a selective migration strategy. The recommendation is to keep using joins for simple filters and only switch to graph-style traversal when the query shape no longer matches the problem shape.
Sort: