**Apache Airflow version**: 2.1.0

**What happened**:

We use a python script that reads JSON configs from db to dynamically generate DAGs. Sometimes, when JSON Configs is updated, we expect DAGs to be removed in Airflow.  This doesn't always happen. From my observation, one of the following happens:
1) DAG is removed because the python script no longer generates it.
2) DAG still exists but run history is empty. When trigger the DAG, first task is stuck in `queued` status indefinitely.

**What you expected to happen**:
I expect the right behavior should be 
>1) DAG is removed because the python script no longer generates it.

**How to reproduce it**:
* Create a python script in DAG folder that dynamically generates multiple DAGs
* Execute these dynamically generated DAGs a few times
* Use Airflow Variable to toggle (reduce) the # of DAGs generated
* Examine if number of dynamically generated DAGs in the web UI


airflow/models/dag.py
from airflow.timetables.interval import _DataIntervalTimetable
        warnings.warn(
            "`DAG.previous_schedule()` is deprecated.",
            category=DeprecationWarning,
            stacklevel=2,
        )
        if not isinstance(self.timetable, _DataIntervalTimetable):
            return None
        return self.timetable._get_prev(timezone.coerce_datetime(dttm))
    def get_next_data_interval(self, dag_model: "DagModel") -> DataInterval:
        """Get the data interval of the next scheduled run.
        For compatibility, this method infers the data interval from the DAG's
        schedule if the run does not have an explicit one set, which is possible for
        runs created prior to AIP-39.
        This function is private to Airflow core and should not be depended as a
        part of the Python API.
        :meta private:
        """
        if self.dag_id != dag_model.dag_id:
            raise ValueError(f"Arguments refer to different DAGs: {self.dag_id} != {dag_model.dag_id}")
        data_interval = dag_model.next_dagrun_data_interval
        if data_interval is not None:
            return data_interval
        
        
        return self.infer_automated_data_interval(dag_model.next_dagrun)
    def get_run_data_interval(self, run: DagRun) -> DataInterval: