Something Cas9 does really well is find the sequence you program it to look for, and then bind super tightly to it. You can even change your Cas9 so it will no longer break the DNA. Once you do this, Cas9 cannot edit the DNA by itself, but you can add a second enzyme to it that is able to change a single base of DNA from one letter to another. In theory this means you could target a single nucleotide somewhere in the ~3 billion letters of the genome. We call this changed Cas9 "base editor". It is much more refined than the crude DNA breakage of Cas9, since base editor will initiate only one time of edit in the genome (a single letter flipped from A to G or C to T). But it will still have unintended edits! It is pretty trivial to test for these in whole genome sequencing, and it turns out you will get plenty of them.
Another problem, which might seem more important, but I think is a much easier fix in the medium term (~10 years). Is that base editor will actually target a region of about 5-6 bases around the intended target and will happily flip those bases too. So you are unlikely to get just your intended mutation. Some of your cells will also get other mutations in the same spot. The reason this is less concerning in the long term is that I think this can be fixed with optimisation of the base editor protein. The off target effects are much more difficult to prevent.