It is a hint, not a command. Google can and does ignore a canonical that contradicts other signals — internal links, sitemaps, redirects — which is why the whole set has to agree. A page canonicalised to another URL while every internal link points at itself sends a contradictory message, and the engine picks its own winner.
Every indexable page should carry a self-referencing canonical, including parameter variants that render the same content. The most common damage comes from templates: a canonical hard-coded to the homepage across a whole section quietly removes thousands of pages from competition, and nothing in the interface shows it.