diff --git a/src/metabase/task/send_pulses.clj b/src/metabase/task/send_pulses.clj
index 48dba94606a22e4f9b9a8f9cba873c38dff7f07e..a73f7a714adf443e70476e20c52e320c6c9665b5 100644
--- a/src/metabase/task/send_pulses.clj
+++ b/src/metabase/task/send_pulses.clj
@@ -100,14 +100,19 @@
   "Delete PulseChannels that have no recipients and no channel set for a pulse, returns the channel ids that were deleted."
   [pulse-id]
   (when-let [ids-to-delete (seq
-                            (for [channel (t2/select [:model/PulseChannel :id :details]
+                            (for [channel (t2/select [:model/PulseChannel :id :details :channel_id :channel_type]
                                                      :pulse_id pulse-id
                                                      :id [:not-in {:select   [[:pulse_channel_id :id]]
                                                                    :from     :pulse_channel_recipient
                                                                    :group-by [:pulse_channel_id]
                                                                    :having   [:>= :%count.* [:raw 1]]}])
-                                  :when (and (empty? (get-in channel [:details :emails]))
-                                             (not (get-in channel [:details :channel])))]
+                                  :when  (case (:channel_type channel)
+                                           :email
+                                           (empty? (get-in channel [:details :emails]))
+                                           :slack
+                                           (empty? (get-in channel [:details :channel]))
+                                           :http
+                                           (nil? (:channel_id channel)))]
                               (:id channel)))]
     (log/infof "Deleting %d PulseChannels with id: %s due to having no recipients" (count ids-to-delete) (str/join ", " ids-to-delete))
     (t2/delete! :model/PulseChannel :id [:in ids-to-delete])
diff --git a/test/metabase/channel/http_test.clj b/test/metabase/channel/http_test.clj
index 1f84e72d5be18017bf1add508f2af77bc42efa84..f5eba2376ca21ad8010bf42dda32cb07b55d6747 100644
--- a/test/metabase/channel/http_test.clj
+++ b/test/metabase/channel/http_test.clj
@@ -7,7 +7,7 @@
    [compojure.core :as compojure]
    [medley.core :as m]
    [metabase.channel.core :as channel]
-   [metabase.pulse :as pulse]
+   [metabase.task.send-pulses :as task.send-pulses]
    [metabase.test :as mt]
    [metabase.util.i18n :refer [deferred-tru]]
    [ring.adapter.jetty :as jetty]
@@ -328,10 +328,10 @@
          :model/Channel      {chn-id :id}  {:type    :channel/http
                                             :details {:url         (str url (:path receive-route))
                                                       :auth-method "none"}}
-         :model/PulseChannel _             {:pulse_id     pulse-id
+         :model/PulseChannel {pc-id :id}   {:pulse_id     pulse-id
                                             :channel_type "http"
                                             :channel_id   chn-id}]
-        (pulse/send-pulse! pulse)
+        (#'task.send-pulses/send-pulse!* pulse-id [pc-id])
         (is (=? {:body {:type               "alert"
                         :alert_id           pulse-id
                         :alert_creator_id   (mt/malli=? int?)
diff --git a/test/metabase/task/send_pulses_test.clj b/test/metabase/task/send_pulses_test.clj
index f28a93be70b664491c2abf390edb23cfd8de0f78..b10d6e4c2eb6c44ed2db102dd9d0a7275665399b 100644
--- a/test/metabase/task/send_pulses_test.clj
+++ b/test/metabase/task/send_pulses_test.clj
@@ -30,33 +30,72 @@
                (t2/count PulseChannel)))
         (is (:archived (t2/select-one Pulse :id pulse-id)))))
 
-    (testing "Has PulseChannelRecipient"
-      (mt/with-temp [Pulse                 {pulse-id :id} {}
-                     PulseChannel          {pc-id :id} {:pulse_id     pulse-id
-                                                        :channel_type :email}
-                     PulseChannelRecipient _           {:user_id          (mt/user->id :rasta)
-                                                        :pulse_channel_id pc-id}]
-        (#'task.send-pulses/clear-pulse-channels-no-recipients! pulse-id)
-        (is (= 1
-               (t2/count PulseChannel)))))
+    (testing "emails"
+      (testing "keep if has PulseChannelRecipient"
+        (mt/with-temp [Pulse                 {pulse-id :id} {}
+                       PulseChannel          {pc-id :id} {:pulse_id     pulse-id
+                                                          :channel_type :email}
+                       PulseChannelRecipient _           {:user_id          (mt/user->id :rasta)
+                                                          :pulse_channel_id pc-id}]
+          (#'task.send-pulses/clear-pulse-channels-no-recipients! pulse-id)
+          (is (= 1
+                 (t2/count PulseChannel)))))
 
-    (testing "Has email"
-      (mt/with-temp [Pulse        {pulse-id :id} {}
-                     PulseChannel _ {:pulse_id     pulse-id
-                                     :channel_type :email
-                                     :details      {:emails ["test@metabase.com"]}}]
-        (#'task.send-pulses/clear-pulse-channels-no-recipients! pulse-id)
-        (is (= 1
-               (t2/count PulseChannel)))))
+      (testing "keep if has external email"
+        (mt/with-temp [Pulse        {pulse-id :id} {}
+                       PulseChannel _ {:pulse_id     pulse-id
+                                       :channel_type :email
+                                       :details      {:emails ["test@metabase.com"]}}]
+          (#'task.send-pulses/clear-pulse-channels-no-recipients! pulse-id)
+          (is (= 1
+                 (t2/count PulseChannel)))))
 
-    (testing "Has channel"
-      (mt/with-temp [Pulse        {pulse-id :id} {}
-                     PulseChannel _ {:pulse_id     pulse-id
-                                     :channel_type :slack
-                                     :details      {:channel ["#test"]}}]
-        (#'task.send-pulses/clear-pulse-channels-no-recipients! pulse-id)
-        (is (= 1
-               (t2/count PulseChannel)))))))
+      (testing "clear if no recipients"
+        (mt/with-temp [Pulse        {pulse-id :id} {}
+                       PulseChannel _ {:pulse_id     pulse-id
+                                       :channel_type :email}]
+          (#'task.send-pulses/clear-pulse-channels-no-recipients! pulse-id)
+          (is (= 0
+                 (t2/count PulseChannel))))))
+
+    (testing "slack"
+      (testing "Has channel"
+        (mt/with-temp [Pulse        {pulse-id :id} {}
+                       PulseChannel _ {:pulse_id     pulse-id
+                                       :channel_type :slack
+                                       :details      {:channel "#test"}}]
+          (#'task.send-pulses/clear-pulse-channels-no-recipients! pulse-id)
+          (is (= 1
+                 (t2/count PulseChannel)))))
+
+      (testing "No channel"
+        (mt/with-temp [Pulse        {pulse-id :id} {}
+                       PulseChannel _ {:pulse_id     pulse-id
+                                       :channel_type :slack
+                                       :details      {:channel nil}}]
+          (#'task.send-pulses/clear-pulse-channels-no-recipients! pulse-id)
+          (is (= 0
+                 (t2/count PulseChannel))))))
+
+    (testing "http"
+      (testing "do not clear if has a channel_id"
+        (mt/with-temp [:model/Channel {channel-id :id} {:type :channel/metabase-test
+                                                        :details {}}
+                       :model/Pulse  {pulse-id :id} {}
+                       :model/PulseChannel _ {:pulse_id     pulse-id
+                                              :channel_id   channel-id
+                                              :channel_type "http"}]
+          (#'task.send-pulses/clear-pulse-channels-no-recipients! pulse-id)
+          (is (= 1
+                 (t2/count :model/PulseChannel)))))
+
+      (testing "clear if there is no channel_id"
+        (mt/with-temp [:model/Pulse  {pulse-id :id} {}
+                       :model/PulseChannel _ {:pulse_id     pulse-id
+                                              :channel_type :http}]
+          (#'task.send-pulses/clear-pulse-channels-no-recipients! pulse-id)
+          (is (= 0
+                 (t2/count :model/PulseChannel))))))))
 
 (def ^:private daily-at-1am
   {:schedule_type  "daily"