Before studying more complex books, it’s a good idea to first get an overview.
OCaml for the Skeptical / OCaml in a Nutshell : the title is funny; its main advantage is that it covers most OCaml concepts in 21 short sections where you can experiment by yourself on simple but essential things.
The books/courses already mentioned are nice. You can also consider this one that offers many examples/exercises and also a good overview: Developing Applications With Objective Caml.
LE LANGAGE CAML mentioned by @nojb is an excellent book. Written in Caml Light, it’s easy to turn it by yourself into OCaml. It offers a great chance to learn how to do a lot of things in pure Caml with only stdlib and a simple syntax extension system (use camlp5 (i.e. the “genuine camlp4”) that is fine for that. It works out of the box to deal with streams and it’s a chance to understand what is a LL(1)/recursive descent parser).