diff --git a/frontend/src/metabase/query_builder/actions.js b/frontend/src/metabase/query_builder/actions.js
index 70a57d157401f9d7c06eefbfc03412a29b854d62..a47cd2e0b33682b24927a984e50408360931f7f2 100644
--- a/frontend/src/metabase/query_builder/actions.js
+++ b/frontend/src/metabase/query_builder/actions.js
@@ -131,6 +131,7 @@ export const POP_STATE = "metabase/qb/POP_STATE";
 export const popState = createThunkAction(
   POP_STATE,
   location => async (dispatch, getState) => {
+    dispatch(cancelQuery());
     const card = getCard(getState());
     if (location.state && location.state.card) {
       if (!Utils.equals(card, location.state.card)) {
diff --git a/frontend/src/metabase/query_builder/components/NativeQueryEditor.jsx b/frontend/src/metabase/query_builder/components/NativeQueryEditor.jsx
index c847bc7b87c16f84d2eb12f255bcf48fca5fd905..c60e379cb0461c624ae256843e71eae6ebe09042 100644
--- a/frontend/src/metabase/query_builder/components/NativeQueryEditor.jsx
+++ b/frontend/src/metabase/query_builder/components/NativeQueryEditor.jsx
@@ -211,6 +211,7 @@ export default class NativeQueryEditor extends Component {
   }
 
   componentWillUnmount() {
+    this.props.cancelQuery();
     document.removeEventListener("keydown", this.handleKeyDown);
   }
 
@@ -233,6 +234,7 @@ export default class NativeQueryEditor extends Component {
   };
 
   runQuery = () => {
+    this.props.cancelQuery();
     const { query, runQuestionQuery } = this.props;
 
     // if any text is selected, just run that