I'd turn that around: why have
printf, when it does almost(*) exactly the same thing as
print sprintf combined? After all, two separate, independently usable commands are more interesting to have around, than just have the combined command.
(*) I say almost, as there is one thing printf does differently from print: print appends $\ to everything it prints, while printf doesn't.