There's another way to do this in SQL Server, using an indexed view, plus a supplemental table of numbers:
SET ANSI_NULLS,ANSI_PADDING,ANSI_WARNINGS,ARITHABORT,CONCAT_NULL_YIELDS_NULL,QUOTED_IDENTIFIER ON;
GO
SET NUMERIC_ROUNDABORT OFF;
GO
DROP VIEW IF EXISTS dbo.no_overlap_ranges;
DROP TABLE IF EXISTS dbo.numbers,dbo.ranges;
CREATE TABLE dbo.numbers(n int NOT NULL PRIMARY KEY CHECK (n>=0));
CREATE TABLE dbo.ranges(lo int NOT NULL, hi int NOT NULL, CHECK(lo<hi), CHECK(lo>=0), CHECK(hi>=1), PRIMARY KEY(lo,hi));
GO
CREATE VIEW dbo.no_overlap_ranges(x) WITH SCHEMABINDING AS
SELECT n.n-1+a.lo
FROM dbo.ranges a
INNER JOIN dbo.numbers n ON n.n BETWEEN 1 AND a.hi-a.lo; -- allows for hi value to be low value in another range
GO
CREATE UNIQUE CLUSTERED INDEX no_overlaps ON dbo.no_overlap_ranges(x) WITH (DATA_COMPRESSION=PAGE);
GO
SET NOCOUNT ON;
INSERT dbo.numbers VALUES(1); -- prime it with 1 row
GO
WITH cte(x) AS (SELECT max(n) FROM dbo.numbers) -- use max value to create safe increment, GO 10 to repeat insert 10 times
INSERT dbo.numbers SELECT n+x FROM dbo.numbers CROSS JOIN cte;
GO 10 -- need to GO n to generate 2 ^ n total rows, this is the maximum size of the range (hi-lo)
INSERT dbo.ranges VALUES(1,10); -- safe, no overlap
--INSERT dbo.ranges VALUES(10,11); -- safe, no overlap
INSERT dbo.ranges VALUES(11,20); -- safe, no overlap
INSERT dbo.ranges VALUES(20,30); -- safe, no overlap
INSERT dbo.ranges VALUES(25,35); -- fails with overlap
SELECT * FROM dbo.ranges;
As it says in the comments, the numbers table needs to be populated with enough values to represent the maximum size of the ranges you want to store. If you needed a range of 10,000, then you'd have to populate the numbers table from 1 to 10,000 with no gaps.
The indexed view takes up space in order to populate unique values that can be constrained by a unique index. It's not the best way to accomplish your goal but unless you're going to have lots of data with large ranges, it shouldn't be overwhelmingly large.
By the way, if you are able to use Postgres instead of SQL Server, it does support exclusions:
Edit: logic error in the original view definition, this has been corrected