We'll be adding more query introspection capabilities for these use-cases in jOOQ 4.0, when we re-implement the DSL API / model API separation. Unfortunately, until then, you'll have to keep track of already joined tables yourself, e.g. using a HashSet.
Another way to solve this in jOOQ 3.8 (hopefully) would be by using implicit joins. If we find a performant solution to this problem, we'll support filtering on things like person.address.city, in a similar way that HQL / JPQL allow this. However, this feature will obviously depend on foreign key information to be available, so it won't work with plain SQL usage.
I hope this helps,