Я всегда считал, что join таблиц отрабатывает быстрее чем 2 while select`а. Но вот увидел в коде двойной while select и решил "исправить". После переписывания запроса на join код стал выполняться дольше. Написал простой job
X++:
static void JobJoin(Args _args)
{
    SalesTable      SalesTable;
    SalesLine       SalesLine;
    int             startTime, endTime, i;
    ;
    startTime = timenow();
    while select SalesTable
    {
        while select SalesLine
           where SalesLine.SalesId == SalesTable.SalesId
        {
            i++;
        }
    }
    endTime = timenow();
    info(strFmt("2 while select: %1, i = %2", endTime - startTime, i));
    i = 0;
    startTime = timenow();
    while select SalesTable
        join SalesLine
            where SalesLine.SalesId == SalesTable.SalesId
    {
            i++;
    }
    endTime = timenow();
    info(strFmt("join: %1, i = %2", endTime - startTime, i));
}У меня получилось (Ax 3.0 SP3 KR2, SQL2005 SP2)
X++:
2 while select: 99, i = 56347
join: 129, i = 56347
Получается что 2 while select'а отрабатывают быстрее 

  Может кто нибудь дать научное обоснование сему явлению?