Случайно наткнулся на свидетельство того, что разработчики стандартного приложения про этот косяк давно знают и нашли свой workaround без использования промежуточных переменных - см., например, \Classes\DirPartyMerge\runOnServer:
X++:
while select forupdate docuRef
where docuRef.RefTableId == (tablenum(DirPartyTable))
join partyTable
where partyTable.PartyId == dirPartyId &&
partyTable.RecId == docuRef.RefRecId
Т.е., оказывается, достаточно заключить tablenum в круглые скобки