diff --git a/src/metabase/api/search.clj b/src/metabase/api/search.clj
index 2ccce714cba198694b389679f6e613c3cbcc39ff..27530ba686f91564ce4e3622016d572cadaefc38 100644
--- a/src/metabase/api/search.clj
+++ b/src/metabase/api/search.clj
@@ -171,7 +171,9 @@
   [model archived?]
   (if archived?
     [:= 1 0]  ; No tables should appear in archive searches
-    [:= (hsql/qualify (model->alias model) :active) true]))
+    [:and
+     [:= (hsql/qualify (model->alias model) :active) true]
+     [:= (hsql/qualify (model->alias model) :visibility_type) nil]]))
 
 (defn- wildcard-match
   [s]
diff --git a/test/metabase/api/search_test.clj b/test/metabase/api/search_test.clj
index bf224f0ea1766865765d688a752065eb8121d735..5d2b3da5272010f32864fdf6d2f5f8cf9405c6fc 100644
--- a/test/metabase/api/search_test.clj
+++ b/test/metabase/api/search_test.clj
@@ -481,6 +481,12 @@
       (do-test-users [user [:crowberto :rasta]]
         (is (= [(default-table-search-row "Round Table")]
                (search-request-data user :q "Round Table"))))))
+  (testing "You should not see hidden tables"
+    (mt/with-temp* [Table [normal {:name "Foo Visible"}]
+                    Table [hidden {:name "Foo Hidden", :visibility_type "hidden"}]]
+      (do-test-users [user [:crowberto :rasta]]
+        (is (= [(default-table-search-row "Foo Visible")]
+               (search-request-data user :q "Foo"))))))
   (testing "You should be able to search by their display name"
     (let [lancelot "Lancelot's Favorite Furniture"]
       (mt/with-temp Table [table {:name "Round Table" :display_name lancelot}]