INNER JOIN repetido em query com Criteria

Olá,

Estou trabalhando em um método em que uma determinada tabela necessita fazer join com outra e com um campo desta segunda tabela ainda fazer outra comparação com ela. Algo assim:

SELECT * FROM tab1 INNER JOIN tab2 WHERE tab2.id = (SELECT MAX(id) FROM tab2)

O método está da seguinte maneira

[code]
CriteriaBuilder cb = manager.getCriteriaBuilder();
CriteriaQuery c = cb.createQuery(Subs.class);
Root subs = c.from(Subs.class);
Subquery sq = c.subquery(Number.class);
Root auth = sq.from(Auth.class);
sq.select(cb.max(auth.get(“authId”).as(Number.class)));
sq.where(cb.equal(auth.get(“target”), target));
List predicates = new ArrayList();
if (target != null)
predicates.add(cb.equal(subs.get(“target”), target));

predicates.add(subs.get(“Auths”).get(“authId”).in(sq));

c.where(predicates.toArray(new Predicate[predicates.size()]));[/code]

E o único mapeamento que existe é unidirecional, de Subs para Auth:

@OneToMany(fetch=FetchType.EAGER) @JoinColumn(name="SubsIdAuth") private List<Auth> Auths;

Isto funciona, porém o OpenJPA faz o seguinte:

FROM tab_subs t0 INNER JOIN tab_auth t1 ON t0.CodSubs = t1.SubsId INNER JOIN tab_auth t5 ON t0.CodSubs = t5.SubsId

Alguém sabe como evitar este segundo join?