Причина вашей проблемы, вероятно, зависит от используемого вами стека клиента.
Говоря в очень общих терминах, SQL Server будет возвращать столбцы в порядке их добавления в таблицу, если вы выполните SELECT *. Если в запросе задействовано более одной таблицы, столбцы из каждой таблицы будут возвращаться в порядке их появления в запросе.
Ни кэширование, ни оптимизация не должны влиять на эту сторону сервера, если столбцы таблицы изменились, поэтому между вашим кодом и сервером может происходить что-то, в каком бы стеке доступа вы ни находились.
Это одна из причин, по которой обычно не рекомендуется использовать «SELECT *» в клиентском коде.