Maybe as much as comprehensive as Prof. Hirsch’s book (recommended by Manan) https://www.elsevier.com/books/numerical-computation-of-internal-and-external-flows-the-fundamentals-of-computational-fluid-dynamics/hirsch/978-0-7506-6594-0
but, in my opinion, more didactically organized, is the one by Prof. Pletcher et alii https://www.crcpress.com/Computational-Fluid-Mechanics-and-Heat-Transfer-Third-Edition/Pletcher-Tannehill-Anderson/p/book/9781591690375
if concision is very important for you, however, you would prefer Prof. Zikanov’s http://www.wiley.com/WileyCDA/WileyTitle/productCd-0470423293,subjectCd-PH50.html
(a textbook great for classroom, not very beautifull, but adequate for the usually impatient students).
These three books cover different methods designed for compressible and for incompressible flows simulation, in this order, and I think this is not an unimportant detail: these are books more attractive for those interested in high speed (high Mach number, where shock waves could appear) flows. A fourth very good CFD book for high speed flows (with no more than a few words about techniques for incompressible flows simulation) is the one by Blazek https://www.elsevier.com/books/computational-fluid-dynamics-principles-and-applications/blazek/978-0-08-044506-9 .
The four books above mentioned deal with analysis of stability and accuracy of algorithms in depth (and may be hard to understand for readers without an appreciable degree of mathematical maturity). I will come back to the reasons for distinguishing between books more devoted to high speed flows from those dedicated to low speed flows, after commenting some of those belonging to the low speed (mostly incompressible) flows school in the next paragraph.
Versteeg and Malalasekera, specially in this 2nd. edition https://www.pearsonhighered.com/program/Versteeg-An-Introduction-to-Computational-Fluid-Dynamics-The-Finite-Volume-Method-2nd-Edition/PGM299497.html
wrote an easy to read book, that probably fits the needs of most CFD users not dealing with high speed flows. Similar to it, but more oriented to code writing is the 2016 book by Moukhaled et alii (of the Matlab generation) http://www.springer.com/br/book/9783319168739
and even more oriented to code writing is the 2002 ed. of that by Ferziger and Peric (with Fortran 2D example codes) http://www.springer.com/br/book/9783540420743
The book of Ferziger and Peric brings less of the turbulence models in use today, but more about the solution of compressible flows, mainly using (pressure based) algorithms designed primarily for incompressible flows solution.
Discussing differences between algorithms designed for compressible flows solution and those designed for incompressible flows it is usual to speak about density based and pressure based algorithms. These denominations reflect the fact that in the numerical solution of a compressible flow, the mass conservation can be used to obtain the variation in time of the fluid density (partial rho / partial t), while in incompressible flows solution, density being constant, normally the mass conservation equation is used to build a Poisson equation for pressure. It should be noted, however, that the accurate representation of the discontinuity of properties that takes place at a shock wave is a much more difficult problem to deal with than the need of creating some artificial compressibility for solving incompressible flows using density based solvers or the provisions needed to allow density variations in an algorithm initially designed for incompressible flows solution. Accurate shock waves representation in difference methods (FVM, FDM or FEM) generally requires that the total variation of the characteristic variables diminishes as the numerical transient solution evolves. This is called the TVD property of a discretization (differencing) scheme and does not deal with the total variation of the primitive variables (density,velocity and pressure) or of the conservative ones (density, momentum and internal energy). When a TVD discretization scheme is used, but in the neighborhood of a shock are found nonphysical oscillations, probably the characteristic variables (I mean some some form of flux-vector splitting using the eigenvectors of the inviscid flux-vector jacobian matrix) and characteristic velocities are not being correctly employed. In the books by Hirsch (in less depth in the 2nd. than in the 1st. ed.), Pletcher et alii, Zikanov, Blazek and in that by Chung (to be presented in the next paragraph), the meaning of these characteristic variables (and of their corresponding characteristic velocities of propagation) are discussed, but I only started to understand its importance after following (implementing some of the methods and reproducing figures of) Prof. LeVeque’s book http://www.springer.com/gp/book/9783764327231 (almost entirely dedicated to the numerical solution of Euler equations in 1D).
In a category of its own, containing essentially all the subjects (and all the speeds) approached by the others here mentioned but going also into acoustics, reactive, multiphase and electromagnetic flows, radiative heat transfer (this topic, and combustion, are discussed by Versteeg and Malalasekera also in depth) and even relativistic astrophysics in its 1012 pages (it is not for the weak), is the book of Prof. Chung http://www.cambridge.org/br/academic/subjects/engineering/thermal-fluids-engineering/computational-fluid-dynamics-2nd-edition?format=HB&isbn=9780521769693 . It seems more recommendable for consulting than for learning the basics, but albeit this and the weight, I deem it handier than Hirsch’s.
Finally, for those interested in free-surface flows (absent of the books above with the exception of those of Ferziger and Peric and of Chung), a great resource is the site edited by Prof. Hirt https://www.flow3d.com/home/resources/cfd-101/