Sign Up

Sign Up to our social questions and Answers Engine to ask questions, answer people’s questions, and connect with other people.

Have an account? Sign In

Have an account? Sign In Now

Sign In

Login to our social questions & Answers Engine to ask questions answer people’s questions & connect with other people.

Sign Up Here

Forgot Password?

Don't have account, Sign Up Here

Forgot Password

Lost your password? Please enter your email address. You will receive a link and will create a new password via email.

Have an account? Sign In Now

You must login to ask a question.

Forgot Password?

Need An Account, Sign Up Here

Please briefly explain why you feel this question should be reported.

Please briefly explain why you feel this answer should be reported.

Please briefly explain why you feel this user should be reported.

Sign InSign Up

The Archive Base

The Archive Base Logo The Archive Base Logo

The Archive Base Navigation

  • SEARCH
  • Home
  • About Us
  • Blog
  • Contact Us
Search
Ask A Question

Mobile menu

Close
Ask a Question
  • Home
  • Add group
  • Groups page
  • Feed
  • User Profile
  • Communities
  • Questions
    • New Questions
    • Trending Questions
    • Must read Questions
    • Hot Questions
  • Polls
  • Tags
  • Badges
  • Buy Points
  • Users
  • Help
  • Buy Theme
  • SEARCH
Home/ Questions/Q 3756988
In Process

The Archive Base Latest Questions

Editorial Team
  • 0
Editorial Team
Asked: May 19, 20262026-05-19T09:56:13+00:00 2026-05-19T09:56:13+00:00

SELECT C.* FROM StockToCategory STC INNER JOIN Category C ON STC.CategoryID = C.CategoryID WHERE

  • 0
SELECT C.* FROM StockToCategory STC 
INNER JOIN Category C ON STC.CategoryID = C.CategoryID 
WHERE STC.StockID = @StockID

VS

SELECT * FROM Category
WHERE CategoryID IN
    (SELECT CategoryID FROM StockToCategory WHERE StockID = @StockID)

Which is considered the correct (syntactically) and most performant approach and why?

The syntax in the latter example seems more logical to me but my assumption is the JOIN will be faster.

I have looked at the query plans and havent been able to decipher anything from them.

Query Plan 1
Query Plan 2

  • 1 1 Answer
  • 0 Views
  • 0 Followers
  • 0
Share
  • Facebook
  • Report

Leave an answer
Cancel reply

You must login to add an answer.

Forgot Password?

Need An Account, Sign Up Here

1 Answer

  • Voted
  • Oldest
  • Recent
  • Random
  1. Editorial Team
    Editorial Team
    2026-05-19T09:56:13+00:00Added an answer on May 19, 2026 at 9:56 am

    The two syntaxes serve different purposes. Using the Join syntax presumes you want something from both the StockToCategory and Category table. If there are multiple entries in the StockToCategory table for each category, the Category table values will be repeated.

    Using the IN function presumes that you want only items from the Category whose ID meets some criteria. If a given CategoryId (assuming it is the PK of the Category table) exists multiple times in the StockToCategory table, it will only be returned once.

    In your exact example, they will produce the same output however IMO, the later syntax makes your intent (only wanting categories), clearer.

    Btw, yet a third syntax which is similar to using the IN function:

    Select ...
    From Category
    Where Exists    (
                    Select 1
                    From StockToCategory
                    Where StockToCategory.CategoryId = Category.CategoryId
                        And StockToCategory.Stock = @StockId
                    )
    
    • 0
    • Reply
    • Share
      Share
      • Share on Facebook
      • Share on Twitter
      • Share on LinkedIn
      • Share on WhatsApp
      • Report

Sidebar

Related Questions

SELECT * FROM ExternalQuestionKeyword INNER JOIN ExternalKeywords ON ExternalKeywords.ID=ExternalQuestionKeyword.KeywordID WHERE QuestionID = 17
SELECT * FROM [Group] g INNER JOIN User2Group ug **on g.Id != ug.GroupId** INNER
SELECT * FROM Table_A LEFT JOIN Table_B ON (Table_A.A_ID = Table_B.A_ID) INNER JOIN Table_C
(SELECT * FROM table1 INNER JOIN table2 ON table1.id = table2.id) AS t1 JOIN
SELECT * FROM conference_attende_options INNER JOIN conference_options ON conference_attende_options.option_id = conference_options.option_id WHERE conference_attende_options.PersonID =
SELECT * FROM wp_posts INNER JOIN wp_term_relationships ON ( wp_posts.ID = wp_term_relationships.object_id) INNER JOIN
SELECT * FROM Questions INNER JOIN QuestionKeyword INNER JOIN Keywords ON Questions.ID=QuestionKeyword.QuestionID AND QuestionKeyword.KeywordID=Keywords.ID
SELECT * FROM banhammer_bans INNER JOIN banhammer_players AS player ON banhammer_bans.player_id = player.id INNER
select * from table where category=@categoryid I'm not sure how easy is this but
SELECT * From `users` AS `User` LEFT JOIN `selections` AS `Selections` ON (`Selections`.`user_id` =

Explore

  • Home
  • Add group
  • Groups page
  • Communities
  • Questions
    • New Questions
    • Trending Questions
    • Must read Questions
    • Hot Questions
  • Polls
  • Tags
  • Badges
  • Users
  • Help
  • SEARCH

Footer

© 2021 The Archive Base. All Rights Reserved
With Love by The Archive Base

Insert/edit link

Enter the destination URL

Or link to existing content

    No search term specified. Showing recent items. Search or use up and down arrow keys to select an item.