diff --git a/querybuilder/atoms/relations.py b/querybuilder/atoms/relations.py
index 59f9cd0a720b2f851aba8433f0d49cb3ff2ab9d9..68ded344cf43861d3852ca10175bd61ec0bdaab2 100644
--- a/querybuilder/atoms/relations.py
+++ b/querybuilder/atoms/relations.py
@@ -283,7 +283,7 @@ class Aliased(Named):
             (
                 qbcolumns.name_column(c, self.column_aliases[i])
                 if i in self.column_aliases
-                else c
+                else qbcolumns.name_column(c, relation_name=self.name)
                 for i, c in enumerate(self.subrelation.columns)
             )
         )
@@ -327,6 +327,8 @@ class Aliased(Named):
 
     def __getstate__(self):
         state = super().__getstate__()
+        state["subrelation"] = self.subrelation
+        state["column_aliases"] = self.column_aliases
         state["columns"] = None  # maybe a little ugly?
 
         return state
diff --git a/querybuilder/tests/atoms/test_relations.py b/querybuilder/tests/atoms/test_relations.py
index d3615132dd0c0a93a1111e4f190b4b16ecb14502..7e9087e9773212b1dac089579fad9d02022a99e2 100644
--- a/querybuilder/tests/atoms/test_relations.py
+++ b/querybuilder/tests/atoms/test_relations.py
@@ -302,7 +302,7 @@ class TestAliased:
 
         expected_columns = (
             qbcolumns.Named(int, "a"),
-            subrel.columns[1],
+            qbcolumns.Named(int, "b", relation_name="bar"),
             qbcolumns.Named(int, "c"),
         )
 
diff --git a/querybuilder/tests/drivers/sql/test_tokenizer.py b/querybuilder/tests/drivers/sql/test_tokenizer.py
index 11cc7db04ab89422c0bd778baa57f0c66a918d9c..6f7c78ba4bb048762a52187f82d5009507bc78c9 100644
--- a/querybuilder/tests/drivers/sql/test_tokenizer.py
+++ b/querybuilder/tests/drivers/sql/test_tokenizer.py
@@ -1601,4 +1601,6 @@ class TestSQLTokenizer:
 
         rel = qbrelations.Aliased(subrel, "bar", column_aliases={1: "col"})
 
-        assert rel == self.tk.transform(rel)
+        transrel = self.tk.transform(rel)
+
+        assert rel == transrel
diff --git a/querybuilder/tests/drivers/sqlite/test_sqlite_tokenizer.py b/querybuilder/tests/drivers/sqlite/test_sqlite_tokenizer.py
index d5bcef937179fdfed09edb7d7c364f71c13d095d..3e9640a44e0ea7beb0b433faf1af6645a43fc26e 100644
--- a/querybuilder/tests/drivers/sqlite/test_sqlite_tokenizer.py
+++ b/querybuilder/tests/drivers/sqlite/test_sqlite_tokenizer.py
@@ -132,3 +132,16 @@ class TestSqliteTokenizer(parent_suite.TestSQLTokenizer):
         assert qbcolumns.False_() == naming_relation.where
         for i, c in enumerate(naming_relation.columns):
             assert expected_column_names[i] == c.name
+
+    def test_transform_aliased_relation_with_column_aliases(self):
+        column_names = ("x", "b", "z")
+        columns = tuple(qbcolumns.Named(int, name) for name in column_names)
+
+        subrel = qbrelations.Named("foo", columns=columns)
+
+        rel = qbrelations.Aliased(subrel, "bar", column_aliases={1: "col"})
+
+        transrel = self.tk.transform(rel)
+
+        assert rel.name == transrel.name
+        assert rel.schema_name == transrel.schema_name