Посмотрел внимательно на SysQueryBuilder и понял что был неправ. Поля одинакового типа здесь не при чем. Все дело в том, как строятся датасоурсы. Для отработки связей используется класс DictRelation, методы loadFieldRelation или loadTableRelation. При этом поле для которого строится связь нигде не учитывается и происходит, судя по всему, выбор первого из подходящих по FieldId.