It's better to have a CHECK constraint on the table that prevents values higher than 20 from being inserted or updated. Is this data being imported from a different source, or being entered by hand? If it's being imported then you should have an ETL process that changes higher values to 20, rather than having a trigger do it.
While a trigger can certainly do this, you could encounter performance issues, and it can't guarantee the data will be correct.