We've used both. We'd always recommend GROQ over GraphQL. Simply put, it's more powerful for most use cases, and if you're using it with Sanity, it's absolutely recommended. In short, it allows you to transform your data within your query, so it saves you from doing a bunch of code on the front end and only carries data that you actually need. Whereas with GraphQL, our anecdotal experience has always been clunky, tricky to maintain and generally a slower developer experience. GraphQL fragments exist, but in practice, they're a surefire way of complicating the hell out of your query and not being able to read it six months down the line. For some background, we've used Gatsby, which has GraphQL as a default layer as part of the framework, and we've used Sanity. Needless to say, we're a Next.js agency now, so that probably speaks volumes about our view of GraphQL.