What you're experiencing is one of the frustrating pieces of Ownership Chaining. A DENY is not respected when an Ownership Chain is in play because only the highest chain in the link has its permissions checked.
This worked for me:
USE YourDatabase; DENY SELECT ON sys.[check_constraints] TO public;
-- note that this affects all users in all databases who only have public membership into master, i.e. mapped via the guest user
USE master; DENY SELECT ON INFORMATION_SCHEMA.check_constraints TO public;
And this puts the furniture back:
USE YourDatabase; REVOKE SELECT ON sys.[check_constraints] TO public;
USE master; GRANT SELECT ON INFORMATION_SCHEMA.check_constraints TO public;
There are no special teachers of virtue, because virtue is taught by the whole community.
--Plato