**Apache Airflow version**: 2.0.1


**Kubernetes version (if you are using kubernetes)** (use `kubectl version`): 1.16

**Environment**:

- **Cloud provider or hardware configuration**:
- **OS** (e.g. from /etc/os-release):
- **Kernel** (e.g. `uname -a`):
- **Install tools**:
- **Others**:

**What happened**:

Airflow fails to schedule any tasks after some time. The "Task Instance Details" tab of some of the failed tasks show the following: 

```
('Not scheduling since there are %s open slots in pool %s and require %s pool slots', -3, 'transformation', 3)
```

Admin > Pools tab shows 0 Running Slots but 9 Queued Slots. Gets stuck in this state until airflow is restarted.

**What you expected to happen**:

Number of "open slots in pool" should never be negative! 

**How to reproduce it**:
- Create/configure a pool with a small size (eg. 6)
- DAG with multiple tasks occupying multiple pool_slots (eg. pool_slots=3)


**Anything else we need to know**:

airflow/models/pool.py
#
#
#
from typing import Dict, Iterable, Optional, Tuple
from sqlalchemy import Column, Integer, String, Text, func
from sqlalchemy.orm.session import Session
from airflow.exceptions import AirflowException
from airflow.models.base import Base
from airflow.ti_deps.dependencies_states import EXECUTION_STATES
from airflow.typing_compat import TypedDict
from airflow.utils.session import provide_session
from airflow.utils.sqlalchemy import nowait, with_row_locks
from airflow.utils.state import State
class PoolStats(TypedDict):
    """Dictionary containing Pool Stats"""
    total: int
    running: int
    queued: int
    open: int
class Pool(Base):
    """the class to get Pool info."""
    __tablename__ = "slot_pool"
    id = Column(Integer, primary_key=True)
    pool = Column(String(256), unique=True)
    
    slots = Column(Integer, default=0)
    description = Column(Text)
    DEFAULT_POOL_NAME = 'default_pool'
    def __repr__(self):