Yes it's okay and sometimes expected for them not not behave the same, but see e.g. haxl and ApplicativeDo.
For example, the applicative version may run foo and bar in parallell. But using monad they run sequentially.