Here's the difference:

* `sys.sysobjects` is an old SQL Server 2000 system table (compatibility view). Starting SQL Server 2005, Microsoft introduced a new set of catalog view as a replacement (eg. sys.objects)

* `sys.system_objects` is a catalog view. You can check the object definition by executing this: `SELECT OBJECT_DEFINITION(OBJECT_ID('sys.system_objects'))`

Inside the catalog view you can see they are using the system table from `sys.objects`:
<pre><code>CREATE VIEW sys.system_objects 
AS   
SELECT o.name,    
o.id AS object_id,    
convert(int, null) AS principal_id,    
o.nsid AS schema_id,    convert(int, 0) AS parent_object_id,    
o.type,    
n.name AS type_desc,    
o.created AS create_date,    
o.modified AS modify_date,    
convert(bit, 1) AS is_ms_shipped,    
convert(bit, 0) AS is_published,    
convert(bit, 0) AS is_schema_published   
FROM sys.sysschobjs o   
LEFT JOIN sys.syspalnames n ON n.class = 'OBTY' AND n.value = o.type   WHERE has_access('SO', o.id) = 1 </code></pre> 

Extracting from `sys.objects` you can find the `sys.sysschobjs`
<pre><code>SELECT name, type_desc FROM sys.objects
WHERE name = 'sysschobjs' </pre></code>

[The system table below needs DAC to access][1]
<pre><code>+------------+--------------+
| **name**       | **type_desc**    |
+------------+--------------+
| sysschobjs | SYSTEM_TABLE |
+------------+--------------+</pre></code>

you can check out other system tables and compare like:

 - `sys.databases` (SQL Server 2005 and up)
 - `sys.sysdatabases` (SQL Server 2000)

Microsoft doesn't encourage us to use the old system tables. The old compatibility views don't have the new metadata related to higher version of SQL Server features (eg. partitioning, etc). Only use it on SQL Server 2000 as Microsoft will remove it from future release of SQL Server.


  [1]: https://dba.stackexchange.com/a/193339/37701