GraphQL é muito popular, muito poderoso, mas é fundamentalmente diferente do OData. Então não é que um seja absolutamente melhor que o outro.
Tem alguns pontos que eu entendo.
OData = SQL na URL
OData era uma forma de serializar uma instrução SQL em uma URL
É difícil limitar a capacidade de consulta do lado do cliente.
OData Padronizado
A especificação do OData é sua força, assim como o RPC faz com o RESTful. O RESTful tem especificações e é fácil de entender, mas não é fácil expressar tudo. O RPC pode expressar tudo, mas é muito pouco padronizado.
Falhas no OData
OData geralmente é mais rígido que o estado do esquema do banco de dados (então é como SQL Query), e uma vez que o esquema é alterado, fica mais difícil manter a versão antiga.
OData prefere gerenciamento unificado, e é difícil otimizar para casos especiais.
Melhor descrito
OData é como SQL Query, GraphQL é como stored procedure. Você prova devagar.
Portanto, esses dois devem coexistir e se complementar.
resumo
OData é como SQL Query, GraphQL é como stored procedure.
OData é como RESTful, e GraphQL é como RPC
Quando você quer unificação simples, vai achar o RESTFul ótimo, SQL Query é suficiente, OData é bom.
Mas quando você tem situações especiais e não pode usar um método simples, RPC, stored procedure, o GraphQL destaca seu charme.
Vamos analisar os cenários de uso de ambos os lados. OData tende a ser uma API para aplicações empresariais, como SAP. Geralmente o padrão mais simples e relacional de banco de dados.
GraphQL é uma aplicação para a Internet, uma API exposta e qualquer tipo de dado (como NoSQL)
Resumindo, o GraphQL pode expressar mais (mais livremente) do que o OData, o OData tem regras (mais restrições) do que o GraphQL
Qual é, ou GraphQL para o mundo externo, ou OData para o interno, realmente depende do projeto para usá-lo.