If you do
sp_helptext 'INFORMATION_SCHEMA.COLUMNS' you will see
sys.objects and only includes columns where the corresponding object is of type 'U' or 'V'.
sys.colums includes additional types with the complete list documented as.
- Table-valued assembly functions (FT)
- Inline table-valued SQL functions (IF)
- Internal tables (IT)
- System tables (S)
- Table-valued SQL functions (TF)
- User tables (U)
- Views (V)
So the following should return the same count
FROM sys.columns c
JOIN sys.objects o ON c.object_id = o.object_id
where o.type IN ('U', 'V')
o.type = 'U' if you only want user tables