Il y a une légère différence de sens entre avoir à et devoir. Notre Dictionnaire, à l’article Avoir, glose ainsi la locution avoir à : « Devoir, être plus ou moins impérativement contraint de, obligé de ». C’est une façon d’indiquer que, dans un certain nombre d’emplois, on peut utiliser indifféremment l’un ou l’autre.
Mais devoir, contrairement à la locution verbale avoir à, est polysémique et souvent équivoque. Il a dû partir peut se comprendre de deux façons : « il est probablement parti » ou « il a été obligé de partir ».
Certains grammairiens estiment que, lorsqu’il marque l’obligation, devoir a une connotation morale que n’a pas avoir à, qui marque une contrainte imposée de l’extérieur. Devoir désigne ce que nous sommes tenus de faire en vertu de la loi morale et de notre conscience, et s’oppose à l’obligation notée par avoir à, qui désigne ce qui nous est imposé par les mœurs, par les dispositions légales.
Quand il s’agit d’une contrainte extérieure, il est donc préférable d’employer avoir à (Elle n’aura rien à payer), même si devoir n’est pas incorrect (Elle ne devra rien payer) mais plus flou : la nature de la contrainte en cause oscille, sans se fixer, entre le factuel et le moral, l’intérieur et l’extérieur. Si l’on veut renvoyer à une obligation morale, intériorisée, c’est devoir qu’il convient d’employer.