diff --git a/frontend/src/metabase/dashboard/reducers.js b/frontend/src/metabase/dashboard/reducers.js
index c52a9e1cfef9dfb7b76464a97735ccd8425c2165..fc6c5c28acd64a2e0fd72831e62d573612907379 100644
--- a/frontend/src/metabase/dashboard/reducers.js
+++ b/frontend/src/metabase/dashboard/reducers.js
@@ -388,7 +388,9 @@ const loadingDashCards = handleActions(
     },
     [FETCH_CARD_DATA_PENDING]: {
       next: (state, { payload: { dashcard_id } }) => {
-        const loadingIds = state.loadingIds.concat(dashcard_id);
+        const loadingIds = !state.loadingIds.includes(dashcard_id)
+          ? state.loadingIds.concat(dashcard_id)
+          : state.loadingIds;
         return {
           ...state,
           loadingIds,
diff --git a/frontend/src/metabase/dashboard/reducers.unit.spec.js b/frontend/src/metabase/dashboard/reducers.unit.spec.js
index 3ae70fa4cc98810c4af2a34047be923b812d1b0b..2bd16b4a3f49f94a2ba533b4dd31e976acab11d0 100644
--- a/frontend/src/metabase/dashboard/reducers.unit.spec.js
+++ b/frontend/src/metabase/dashboard/reducers.unit.spec.js
@@ -8,6 +8,7 @@ import {
   SET_DASHBOARD_ATTRIBUTES,
   FETCH_DASHBOARD_CARD_DATA,
   FETCH_CARD_DATA,
+  FETCH_CARD_DATA_PENDING,
 } from "./actions";
 
 describe("dashboard reducers", () => {
@@ -346,5 +347,26 @@ describe("dashboard reducers", () => {
         dashcardData: { 3: { 1: {} } },
       });
     });
+
+    it("should not have duplicated elements in loadingIds on pending (metabase#33692, metabase#34767)", () => {
+      const result = reducer(
+        {
+          ...initState,
+          loadingDashCards: {
+            loadingIds: [3],
+            loadingStatus: "running",
+            startTime: 100,
+          },
+        },
+        {
+          type: FETCH_CARD_DATA_PENDING,
+          payload: {
+            dashcard_id: 3,
+            card_id: 1,
+          },
+        },
+      );
+      expect(result.loadingDashCards.loadingIds).toEqual([3]);
+    });
   });
 });