With
используется для «предоставления дополнительных условий объединения», что означает, что оно добавляется в объединение, а не в предложение where:
from Cat as cat
left join cat.kittens as kitten
with kitten.bodyWeight > 10.0
будет преобразовано во что-то подобное;1005 *
from Cat as cat
left outer join Cat as kitten
on cat.id = kitten.mother_id
and kitten.bodyWeight > 10.0
в то время как это
from Cat as cat
left join cat.kittens as kitten
where kitten.bodyWeight > 10.0
переводится в
from Cat as cat
left outer join Cat as kitten
on cat.id = kitten.mother_id
where
kitten.bodyWeight > 10.0