diff --git a/frontend/src/metabase/reference/databases/TableList.jsx b/frontend/src/metabase/reference/databases/TableList.jsx
index 0de78fa1d8812a2d0f836b76e5fdcddf5ac23117..bed4382b90f0e110d8969dc0a7684c891b8ea5f3 100644
--- a/frontend/src/metabase/reference/databases/TableList.jsx
+++ b/frontend/src/metabase/reference/databases/TableList.jsx
@@ -73,6 +73,7 @@ export const separateTablesBySchema = (
         ? 0
         : -1,
     )
+    .filter(isQueryable)
     .map((table, index, sortedTables) => {
       if (!table || !table.id || !table.name) {
         return;
diff --git a/frontend/test/metabase/reference/databases/TableList.unit.spec.js b/frontend/test/metabase/reference/databases/TableList.unit.spec.js
new file mode 100644
index 0000000000000000000000000000000000000000..69490765dbf1224603783cf94b4ec4424c1af0ba
--- /dev/null
+++ b/frontend/test/metabase/reference/databases/TableList.unit.spec.js
@@ -0,0 +1,8 @@
+import { separateTablesBySchema } from "metabase/reference/databases/TableList";
+
+describe("separateTablesBySchema", () => {
+  it("should filter out hidden tables", () => {
+    const tables = { 1: {}, 2: { visibility_type: "hidden" } };
+    expect(separateTablesBySchema(tables).length).toBe(1);
+  });
+});