  Implementations of a standard language are expected to give same outputs to
identical queries. In this paper we study why different implementations of
SPARQL (Fuseki, Virtuoso, Blazegraph and rdf4j) behave differently when
evaluating queries with correlated variables. We show that at the core of this
problem lies the historically troubling notion of logical substitution. We
present a formal framework to study this issue based on Datalog that besides
clarifying the problem, gives a solid base to define and implement nesting.
