Функция MONTHS_BETWEEN работает с 31-дневными месяцами, когда день месяца не последний день месяца.
SELECT MONTHS_BETWEEN
(TO_DATE('20190201','YYYYMMDD'),
TO_DATE('20190131','YYYYMMDD') ) "Months"
FROM DUAL;
вернет 0.032 (округлено), но
SELECT MONTHS_BETWEEN
(TO_DATE('20190301','YYYYMMDD'),
TO_DATE('20190228','YYYYMMDD') ) "Months"
FROM DUAL;
вернет 0,129
Более подробное описание MONTHS_BETWEN см. В документации
.