Se eu consultar uma tabela que existe em dois esquemas diferentes, mas tem o mesmo nome, o que determina qual tabela é usada?
Por exemplo, tenho uma tabela Bar
que existe em ambos dbo
e foo
, se eu executar a instrução abaixo da qual é retornada:
SELECT * FROM Bar
Achei que isso fosse determinado pelo esquema padrão dos usuários, mas não parece ser o caso.
Pergunto porque encontrei consultas escritas por outra pessoa que não está especificando o nome do esquema, mas o banco de dados que está sendo consultado possui as mesmas tabelas em esquemas diferentes para ETL.
De acordo com os livros online :
Portanto, parece que a conta usada onde o esquema padrão não está funcionando é um membro da função sysadmin. O esquema padrão do usuário dbo é sempre dbo e não pode ser alterado.
A prática recomendada geralmente é qualificar as referências de objeto de esquema para evitar ambigüidade e melhorar o desempenho.