It should work. I’ve just tested it with the script bellow. Do you have the problem when you run the select statement from a SSMS window or do you have it inside a procedure? Could it be that you have execute as statement somewhere in the code?
--Creating a demo database and a demo login
create database Demo
go
create login Demo1 with password = '1qaz@WSX3edc'
go
--Creating a schema and 2 tables on on the new schema and one in the dbo schema
use Demo
go
create schema test
go
create table dbo.tbl (i int)
go
create table test.tbl2 (i int)
go
--Creating a user without specifying his default schema
--which makes the dbo his default schema
create user Demo1 from login Demo1
go
exec sp_addrolemember db_datareader, Demo1
go
--Executing a query as user Demo1. Since I didn't
--specify the schema's name, the server will
--use the default schema
execute as user = 'Demo1'
select * from tbl
revert
go
--Modifying the user's default schema.
alter user Demo1 with default_schema = test
--This time the schema test will be used
execute as user = 'Demo1'
select * from tbl2
revert
go
--cleanup
use master
go
drop database Demo
go
drop login Demo1
Adi
--------------------------------------------------------------
To know how to ask questions and increase the chances of getting asnwers:
http://www.sqlservercentral.com/articles/Best+Practices/61537/
For better answers on performance questions, click on the following...
http://www.sqlservercentral.com/articles/SQLServerCentral/66909/