Realmente não importa onde a coluna está fisicamente desde
select
permitirá que você especifique a ordem (logicamente) em que eles são recuperados. E, se você estiver usando
selecione *
que não permite que você especifique a ordem, você provavelmente não deveria. Existem pouquíssimas situações em que você deveria fazer isso (ferramentas de análise de banco de dados, por exemplo), na maioria das vezes é melhor selecionar as colunas individuais que você deseja, mesmo se quiser todas. Isso permite que você capture alterações de esquema rapidamente para que possa adaptar seus programas a elas. De qualquer forma, o próprio SQL não garante a ordem em que as colunas são retornadas, a menos que você explicitamente liste-os.
selecione *
pode entregá-los a você em ordem ordinal hoje e em ordem alfabética amanhã. Mesmo que uma implementação específica permita que você faça isso (criando uma nova tabela com a coluna no lugar "certo" e copiando os dados, ou fornecendo uma extensão SQL como alter table T insert column C1 before C2 ), eu aconselho contra isso. Ele não será portátil para outras implementações e eu prefiro ter meu código o mais portátil possível.
Além disso, além do que você pode especificar no SQL, um SGBD deve ser capaz de controlar totalmente como ele armazena dados. Pode ser que sua chave primária seja um composto da sétima e quadragésima segunda coluna e pode ser mais eficiente tê-las na frente dos registros físicos.