Você está errado.
MONTHS_BETWEEN
trata o intervalo de tempo de date '2017-02-28'
até date '2017-03-28'
exatamente um mês (mesmo dia em dois meses adjacentes). Isso pode ser lido nos documentos:https://docs .oracle.com/cd/B19306_01/server.102/b14200/functions089.htm
Uma data é maior que a outra, então você obtém um número positivo ou negativo (ou seja, não zero), dependendo de qual é o primeiro e qual é o segundo parâmetro, e como os dias são iguais, o resultado será um número inteiro. Isso é 1 ou -1 para meses adjacentes.
O cálculo do mês é uma coisa estranha de qualquer maneira, pois um mês não é um período de tempo definido. Você parece ter uma certa definição em mente, que simplesmente é diferente de como
MONTHS_BETWEEN
o define. Nada de errado nisso. Concordo com MONTHS_BETWEEN
nesse caso; de 28 de fevereiro a 28 de março é "exatamente" um mês. Se você quiser regras diferentes, aplique sua própria matemática :-)