Index: lib/sqlalchemy/sql/compiler.py
===================================================================
--- lib/sqlalchemy/sql/compiler.py	(revision 4338)
+++ lib/sqlalchemy/sql/compiler.py	(working copy)
@@ -249,7 +249,7 @@
 
         return " ".join([self.process(label.obj), self.operator_string(operators.as_), self.preparer.format_label(label, labelname)])
 
-    def visit_column(self, column, result_map=None, use_schema=False, **kwargs):
+    def visit_column(self, column, result_map=None, use_schema=True, **kwargs):
         # there is actually somewhat of a ruleset when you would *not* necessarily
         # want to truncate a column identifier, if its mapped to the name of a
         # physical column.  but thats very hard to identify at this point, and
Index: lib/sqlalchemy/sql/expression.py
===================================================================
--- lib/sqlalchemy/sql/expression.py	(revision 4339)
+++ lib/sqlalchemy/sql/expression.py	(working copy)
@@ -2623,7 +2623,10 @@
             return None
         if self.__label is None:
             if self.table is not None and self.table.named_with_column:
-                self.__label = self.table.name + "_" + self.name
+                if getattr(self.table, 'schema', None):
+                    self.__label = self.table.schema + "_" + self.table.name + "_" + self.name
+                else:
+                    self.__label = self.table.name + "_" + self.name
                 counter = 1
                 while self.__label in self.table.c:
                     self.__label = self.__label + "_%d" % counter
