Query Returns 3 Million records
Assuming that Asset_ID is thePRIMARY KEY, you will not have any dups until you do theJOINs.  And theDISTINCT` is unnecessary.

Now, let's check the JOINs.  What is the mapping between Assets and each other table?  Is it 1:1?  Or 1:many?  Let's say, for discussion, that an Asset is in multiple "categories".  At this point, what do you want with SELECT ... c.Category?  One solution is

SELECT ..., GROUP_CONCAT(c.Category), ...
    FROM Assets
    JOIN Categories
    GROUP BY Asset_ID  -- this replaces DISTINCT


This avoids exploding the number of rows, and does it by turning that putting a list in the "category" column.