Validation only ever confirms that the syntax is correct. It says the markup is well formed and uses a type the tool recognizes, and it says nothing about whether Google will actually display anything. Whether a rich result appears is a separate decision, one that depends on Google judging the page eligible, trustworthy, and worth showing for that query, and it is a discretionary call the system declines far more often than people expect. Valid markup is necessary, but it is not sufficient, so the assumption that passing the test should produce a result is where the confusion starts.
Several gates sit between valid and shown. The query has to be one that triggers that feature in the first place. The type has to be supported for that category of site, not just present in the code. The page has to be indexed, and the version Google crawled has to actually contain the markup, which is not always true when schema is injected by JavaScript after load. And the page has to satisfy quality guidelines that no validator tests, including the rule that the markup must describe content that is genuinely visible on the page.
There is also a gap between what schema.org permits and what Google rewards. A rating attached to a Service entity, for instance, validates cleanly yet falls outside the supported parent types for that rich result, so it qualifies for nothing no matter how clean the code is. The validator has no opinion about any of this; it checks structure, and structure is the smallest part of the decision.
When a valid block produces no result, the editor stops re-checking the syntax and instead inspects eligibility and page quality directly, reading the Enhancements and URL Inspection reports in Search Console to see what Google actually judged rather than what the test merely confirmed.