Inner join doesn't show all data in sql server 2008 <p>I made a query in sql server 2008 as bellow for my online book shop :</p> <pre><code>SELECT Packages.packageName , Packages.healthStatus , Packages.Stock , Packages.Description , Packages.Image , Packages.YearOfPub , Packages.Edition , updatePackage.price , publisher.publisherName , writer.writerName , translator.translatorName , Categories.CategoriesName , Packages.packageID FROM Packages INNER JOIN updatePackage ON Packages.packageID = updatePackage.packageID INNER JOIN writer ON Packages.writerId = writer.writerId INNER JOIN publisher ON Packages.publisherId = publisher.publisherId INNER JOIN book_translator ON Packages.packageID = book_translator.packageID INNER JOIN translator ON book_translator.translatorId = translator.translatorId INNER JOIN Categories ON Packages.CategoriesId = Categories.CategoriesId </code></pre> <p>but when I execute query SQL server return only books(packages) that has one or many translator because some books hasn't translator/s and in other word, package and translator has many to many relation so I break it by two one to many relation.</p> <p><strong>EDIT :</strong></p> <p>Thanks to Calvin Smith I resolve my problem and change my query to this :<br></p> <pre><code>SELECT Packages.packageName , Packages.healthStatus , Packages.Stock , Packages.Description , Packages.Image , Packages.YearOfPub , Packages.Edition , updatePackage.price , publisher.publisherName , writer.writerName , translator.translatorName , Categories.CategoriesName , Packages.packageID FROM Packages LEFT JOIN updatePackage ON Packages.packageID = updatePackage.packageID LEFT JOIN writer ON Packages.writerId = writer.writerId LEFT JOIN publisher ON Packages.publisherId = publisher.publisherId LEFT JOIN book_translator ON Packages.packageID = book_translator.packageID LEFT JOIN translator ON book_translator.translatorId = translator.translatorId LEFT JOIN Categories ON Packages.CategoriesId = Categories.CategoriesId </code></pre>