Tuesday, October 4, 2011

T-SQL Tuesday #023: Flip Side of the JOIN

T-SQL TuesdayUnbelievable… It’s been almost 5 months since I last posted something here. I had a lot going on since that last post: A daughter graduating from college, a son graduating from high school, a few family vacation trips, moving my son into college, and between all of that, I was juggling an overwhelming amount of work from 3 demanding clients (and still am, quite frankly).

But I’m back now, ready to finally re-JOIN the SQL blogging world once again.

And that is very apt, because this post is part of the October T-SQL Tuesday on the subject of JOINs, hosted by Stuart Ainsworth.

So, let’s not waste any time… Let’s plunge in…

We are all aware of the various JOINs that are available to us in the T-SQL syntax: INNER JOIN, LEFT OUTER JOIN, RIGHT OUTER JOIN, FULL OUTER JOIN, and CROSS JOIN. But what I wanted to talk about today are two other kinds of JOINs: The (LEFT or RIGHT) Semi JOIN and the (LEFT or RIGHT) Anti Semi JOIN.

These are not available to us directly in the syntactical sense, but they are employed in a Query Plan when you use certain types of queries.

A LEFT Semi JOIN returns rows from the left side that have at least one matching row on the right side. At first glance, this seems very much like a regular INNER JOIN, except for one thing. With a LEFT Semi JOIN, the rows from the left table will be returned at most once. Even if the table on the right side contains hundreds of matches for the row on the left side, only one copy of the left-hand row will be returned.

For example, let’s find Handlebar Products (SubCategory=4) in the Products table that appeared on at least one Order. If we use a regular INNER JOIN…

select p.ProductID
from Production.Product p
join Sales.SalesOrderDetail sod on p.ProductID=sod.ProductID
where ProductSubcategoryID=4
/*
ProductID
---------
808
808
808
. . .
809
809
809
. . .
947
947
947
(1531 row(s) affected)
*/
…We get tons of duplicate Product IDs. The (actual) execution plan for the above query looks like so:



Note that the data flow arrow from the Products table showed that 8 rows were processed, and the total rows that were requested by the Nested Loops operator from the SalesOrderDetail Index Seek for those 8 product rows were 1531.

In order to eliminate all the duplicates, we have to introduce a DISTINCT to the query:

select distinct p.ProductID
from Production.Product p
join Sales.SalesOrderDetail sod on p.ProductID=sod.ProductID
where ProductSubcategoryID=4
/*
ProductID
---------
808
809
810
811
813
946
947
*/
Interestingly enough, if we look at the actual execution plan for that query, you would probably expect to find the same plan as before except with an Aggregate operator at the top of the tree to eliminate the duplicates and shrink the 1531 rows down to 7, but instead, this is what we find:



Note that the Nested Loops operator is a LEFT Semi JOIN. Somehow the optimizer is “smart enough” to realize (because of our INNER JOIN and the DISTINCT and our result set only consisting of columns from one side of the JOIN) that it would be more expensive to do the full INNER JOIN and then eliminate the duplicates, and so it employed a LEFT Semi JOIN. This is much more efficient because the Nested Loops operator only needs to request a single row from the SalesOrderDetail Index Seek operator for each Product processed… If a single row exists in SalesOrderDetails, then it can release the Product row to the Select operator for output. If no row exists, then it tosses out the Product row and moves on. If you hover over the data flow arrow coming out of the Index Seek, you’ll see that only 7 rows were passed along (because one of the 8 Product rows did not have a match).

I don’t know about you, but the hairs on the back of my neck stand up whenever I see a DISTINCT in a query. This same solution could be employed (more clearly in my opinion) via three other types of queries, all of which (by nature) involve a Semi JOIN… an INTERSECT query or an EXISTS query or an IN query:

select ProductID
from Production.Product
where ProductSubcategoryID=4
intersect
select
ProductID
from Sales.SalesOrderDetail

select ProductID
from Production.Product p
where ProductSubcategoryID=4
and exists (select *
from Sales.SalesOrderDetail
where ProductID=p.ProductID)

select ProductID
from Production.Product
where ProductSubcategoryID=4
and ProductID in (select ProductID
from Sales.SalesOrderDetail)
All three of the above queries produce the exact same plan, which is the very efficient Semi JOIN plan that we just examined.

It’s really a matter of style as to which approach that you use. I prefer EXISTS or IN. The INTERSECT operator is kind of cool, but it is very limiting. For example, let’s say we wanted the result set to include the Name of the Product as well. In the EXISTS and IN queries (and for that matter in our original INNER JOIN/DISTINCT query), we simply add the Name column to the SELECT clause and we’re done… And the query plan would remain unchanged except for the fact that an extra column will come from the Product table.

But with the INTERSECT query, we have to introduce the Name column to both sides of the INTERSECT, meaning that we have to add an extra JOIN to get the Name:

select ProductID
,Name
from Production.Product
where ProductSubcategoryID=4
intersect
select
sod.ProductID
,p.Name
from Sales.SalesOrderDetail sod
join Production.Product p on sod.ProductID=p.ProductID
/*
ProductID Name
--------- ----------------------
808 LL Mountain Handlebars
809 ML Mountain Handlebars
810 HL Mountain Handlebars
811 LL Road Handlebars
813 HL Road Handlebars
946 LL Touring Handlebars
947 HL Touring Handlebars
*/
And the execution plan now involves a lot more work:



We could also try to re-work the INTERSECT query using a CTE or a derived table to just get the ProductID’s and then JOIN the result to the Products table to get the Name column like so…

with ProductsInOrders as
(
select ProductID
from Production.Product
where ProductSubcategoryID=4
intersect
select ProductID
from Sales.SalesOrderDetail
)
select pio.ProductID
,p.Name
from ProductsInOrders pio
join Production.Product p on pio.ProductID=p.ProductID
/*
ProductID Name
--------- ----------------------
808 LL Mountain Handlebars
809 ML Mountain Handlebars
810 HL Mountain Handlebars
811 LL Road Handlebars
813 HL Road Handlebars
946 LL Touring Handlebars
947 HL Touring Handlebars
*/
…But we still can’t get around the fact that we have to access the Products table multiple times. In fact, the execution plan for the above query is quite amusing when you look at it:



For each Product row acquired in the Clustered Index Scan, it does a SEEK into the same Clustered Index to get the Name! What a waste of resources.

Now on to Anti Semi JOINs…

A LEFT Anti Semi JOIN returns rows from the left side that have no matching rows on the right side… It’s the exact opposite of the Semi JOIN. As you can probably guess, this kind of JOIN is employed when you execute a query using EXCEPT or NOT EXISTS or NOT IN:

select ProductID
from Production.Product
where ProductSubcategoryID=4
except
select
ProductID
from Sales.SalesOrderDetail
/*
ProductID
---------
812
*/

select ProductID
from Production.Product p
where ProductSubcategoryID=4
and not exists (select *
from Sales.SalesOrderDetail
where ProductID=p.ProductID)
/*
ProductID
---------
812
*/

select ProductID
from Production.Product
where ProductSubcategoryID=4
and ProductID not in (select ProductID
from Sales.SalesOrderDetail)
/*
ProductID
---------
812
*/
All three of the above queries produce the exact same execution plan using a LEFT Anti Semi JOIN:



So, for each of the 8 Product rows, the Nested Loops operator requests a row from the SalesOrderDetail table. If one exists, then it tosses the Product row aside and moves on. If one does not exist, then it releases the Product row up to the Select operator for output.

The EXCEPT operator has the same limitations as was described for the INTERSECT operator and therefore is not as useful as the NOT EXISTS or NOT IN types of queries.

One important note about NOT IN. It is only equivalent to the NOT EXISTS query if the column being checked is non-nullable. If the ProductID in Sales.SalesOrderDetail allowed NULLs, then the NOT IN query plan would look like this:



There’s a lot of logic employed in the plan to handle the fact that there may be NULLs in SalesOrderDetail. We can return back to our more simplified query, however, by adding a WHERE IS NOT NULL predicate to our IN subquery:

select ProductID
from Production.Product
where ProductSubcategoryID=4
and ProductID not in (select ProductID
from Sales.SalesOrderDetail
where ProductID is not null)
So if you prefer the NOT IN style over the NOT EXISTS style of querying, it’s a good idea to get in the habit of including a WHERE IS NOT NULL predicate to the subquery.

By the way, many people in the past have tried to emulate the Anti Semi JOIN behavior by doing a LEFT JOIN and adding a WHERE IS NULL to the query to only find rows that have no match on the right side, like so:

select p.ProductID
from Production.Product p
left join Sales.SalesOrderDetail sod on p.ProductID=sod.ProductID
where ProductSubcategoryID=4
and sod.ProductID is null
But this actually produces a plan that LEFT JOINs everything and then employs a Filter to only allow the IS NULL non-matches, creating a lot of unnecessary work and a much more inefficient query than the true Anti Semi JOIN:



I’ve seen people in the past saying that the LEFT JOIN/IS NULL approach is faster than the NOT EXISTS approach, but frankly, I can’t see it. If anyone has an example to offer, I’d certainly like to take a look.

182 comments:

  1. I love that we both touched on the OUTER + IS NULL inefficiency. :)
    http://sqlblog.com/blogs/rob_farley/archive/2011/10/04/joins-without-join.aspx

    ReplyDelete
    Replies
    1. IntelliMindz is the best IT Training in Coimbatore with placement, offering 200 and more software courses with 100% Placement Assistance.
      Python Course In Coimbatore
      Digital Marketing Course In Coimbatore
      sap mm training In Coimbatore
      sap-fico-training-in-coimbatore

      Delete
  2. I can confirm that the left join + where is null trick is slower. I do not see a reason why this cannot be rewritten into a left anti semi join.

    ReplyDelete
  3. Great post, thanks. However, you write "One important note about NOT IN. It is only equivalent to the NOT EXISTS query if the column being checked is non-nullable." Would it be better to say "the column contains no NULL markers"? Nullable columns that have yet to contain any NULL markers would be OK? Yes, risky, but ...

    ReplyDelete
  4. Hi Anonymous...

    No, I believe the original statement I wrote is correct. The query plan that I illustrated in the blog was the result of me just changing the ProductID column to a NULLable column. I didn't actually INSERT any new rows into the table, so every single ProductID was filled in with something.

    --Brad

    ReplyDelete
  5. Hey Loved the post! Great article and congrats on Reaching the To 50! I will be back to visit often


    ReplyDelete
  6. Excellent Blog! I would Thanks for sharing this wonderful content.its very useful to us.I gained many unknown information, the way you have clearly explained is really fantastic.There is lots of Post about Python But your way of Writing is so Good & Knowledgeable.
    Full Stack Training in Chennai | Certification | Online Training Course
    Full Stack Training in Bangalore | Certification | Online Training Course
    Full Stack Training in Hyderabad | Certification | Online Training Course
    Full Stack Developer Training in Chennai | Mean Stack Developer Training in Chennai
    Full Stack Training

    Full Stack Online Training

    ReplyDelete
  7. Wow it is really wonderful and awesome thus it is very much useful for me to understand many concepts and helped me a lot. it is really explainable very well and i got more information from your blog.
    python training in chennai

    python course in chennai

    python online training in chennai

    python training in bangalore

    python training in hyderabad

    python online training

    python training

    python flask training

    python flask online training

    python training in coimbatore

    ReplyDelete
  8. Really great post, Thank you for sharing This knowledge.Excellently written article, if only all bloggers offered the same level of content as you, the internet would be a much better place. Please keep it up!This very blog is obviously entertaining and besides informative. I have chosen a bunch of interesting stuff out of this amazing blog. I ad love to visit it again soon. Cheers!The concept you are saying is good. I was so happy after reading this article. Thankyou so much for good article.the information that you have shared is really useful for everyone. wonderful article. Nicely written and great info.Thanks to share the more information'sJava training in Chennai

    Java Online training in Chennai

    Java Course in Chennai

    Best JAVA Training Institutes in Chennai

    Java training in Bangalore

    Java training in Hyderabad

    Java Training in Coimbatore

    Java Training

    Java Online Training

    ReplyDelete
  9. It’s hard to come by experienced people about this subject, but you seem like you know what you’re talking about!This article is really helpful for me. I am regular visitor to this blog. Share such kind of article more in future. Thanks.
    DevOps Training in Chennai

    DevOps Online Training in Chennai

    DevOps Training in Bangalore

    DevOps Training in Hyderabad

    DevOps Training in Coimbatore

    DevOps Training

    DevOps Online Training

    ReplyDelete
  10. t’s hard to come by experienced people about this subject, but you seem like you know what you’re talking about!This article is really helpful for me. I am regular visitor to this blog. Share such kind of article more in future. Thanks.

    AWS training in Chennai

    AWS Online Training in Chennai

    AWS training in Bangalore

    AWS training in Hyderabad

    AWS training in Coimbatore

    AWS training

    ReplyDelete
  11. Excellent Blog! I would Thanks for sharing this wonderful content.its very useful to us.This is incredible,I feel really happy to have seen your webpage.I gained many unknown information, the way you have clearly explained is really fantastic..keep up!!


    Android Training in Chennai

    Android Online Training in Chennai

    Android Training in Bangalore

    Android Training in Hyderabad

    Android Training in Coimbatore

    Android Training

    Android Online Training

    ReplyDelete
  12. This comment has been removed by the author.

    ReplyDelete
  13. Thank you For Sharing this Information With Us

    ReplyDelete
  14. Thanks for sharing informative post. Tamil typing online is the best tool to translate Tamil to English fast and easy. Tamil typing Software download | Bamini to Unicode

    ReplyDelete
  15. Shreeja Health Care is leading manufacturer of Oil Maker Machine. Shreeja Oil Extraction Machine is able to extract oil from various seeds like peanuts, Coconut, Sesame, Soybean, macadamia nuts, walnuts, sunflower seeds, vegetable seeds flaxseed etc.

    ReplyDelete
  16. very useful information shared in this such great and wonderful blog I like this very much Tamil Novels

    ReplyDelete
  17. Nice Blog !
    Our team at QuickBooks Customer Service offers you the best possible service and solutions for QuickBooks issues in these trying and uncertain times.

    ReplyDelete
  18. This Is Most Useful And Give More Knowledge For Me And Let Me Share It For Alot Of People. And Dont Forget Ti Visit Me Back
    Java course in Bangalore
    Java classes in Bangalore
    Java Training in Bangalore

    ReplyDelete
  19. The stars, the moon, and the sun are minor to me since you sparkle brighter than all of them.
    Help Times

    ReplyDelete
  20. I have read your whole post it's very nice JAMB Result

    ReplyDelete
  21. Everything is very open with a really clear explanation of the challenges. It was really informative. Your website is very useful. Many thanks for sharing! 토토사이트

    ReplyDelete
  22. There are few streaming sites that feature movies and TV shows for free. One such site is MovieGaga The site offers a plethora of movies to stream for free. Moreover, the site has got a unique design, and it gives the site a professional look. It features various contents in high quality. Let us learn more about the MovieGaga site in this write-up.

    ReplyDelete
  23. This is a very interesting article, thanks for sharing.

    Checkout this:shortlisted applicants

    ReplyDelete
  24. This comment has been removed by the author.

    ReplyDelete
  25. Simple but nice and spicy write-up. I had alot going on my mind now after surfing through this post. I must say is one of the intelligent and excellence article. Beautiful and clear understandable piece of technology shared. Thanks for sharing this article. Click on.- fugashua post utme past questions pdf

    ReplyDelete
  26. Such a Excellent Blog. I really want to admire the quality of this post. Fashion Bloggers In India

    ReplyDelete
  27. I would start to make video about it on your place and post it on instagram. I have big and popular insta page because I buy instagram followers regularly.

    ReplyDelete
  28. I found your this post while searching for information about blog-related research ... It's a good post .. keep posting and updating information. Thank you so much for this post. This post very usefull for me:) oppo mobiles under 15000

    ReplyDelete
  29. Thank you for the information it helps me a lot we are lokking forward for more
    DATA SCIENCETraining in Hyderabad

    ReplyDelete
  30. thanks for sharing the info we look forward for more it is so good
    AWS Training in Hyderabad

    ReplyDelete
  31. Thanks for providing such a high-quality ionforamtion! Meet SEO expert in Merut
    SEO Expert in Meerut

    ReplyDelete
  32. Get Ajord is an online exclusive store selling high quality traditional wet shaving products and Shaving Gifts. We are proud to offer a wide selection of the most beautiful, handcrafted Shaving razors, Best shaving brush, shaving sets, Shaving Kits for men and other grooming accessories.

    ReplyDelete
  33. This comment has been removed by the author.

    ReplyDelete
  34. RFX leather deals in quality leather products. we have been in leather clothing field for last 10 years.

    RFX Leather

    B3 BOMBER JACKETS

    Harley Davidson Jackets

    ReplyDelete
  35. 바카라사이트 Incredible points. Sound arguments. Keep up the great effort.

    ReplyDelete
  36. Techbuzz Web Solution provide a reliable and efficient services in cloud telephony era. Techbuzz Web Solution is the absolute Virtual Number provider in Noida,India.

    ReplyDelete
  37. Doron Gil, Ph.D., is an Expert on Self-Awareness and Relationshipsweb361.fr capturedcurrentnews.com

    ReplyDelete
  38. This is Very very nice article. Everyone should read. Thanks for sharing. Don't miss love doll.

    ReplyDelete
  39. https://leatheroutlet.us/collections/b3-leather-bomber-jackets

    ReplyDelete
  40. Thanks For Sharing The Amazing content. I Will also share with my friends. Great Content thanks a lot.

    Bollywood movies, news and more
    sports updates
    Hinid shayari & urdu poetry
    latest news & Gossips

    ReplyDelete
  41. Nice Blog !
    Here We are Specialist in Manufacturing of Movies, Gaming, Casual, Faux Leather Jackets, Coats And Vests See. Eddie Brock Varsity Jacket

    ReplyDelete
  42. Awesome article! I want people to know just how good this information is in your article. It’s interesting, compelling content. Your views are much like my own concerning this subject 먹튀검증 It touched me a lot. I would love to hear your opinion on my site. Please come to the site I run once and leave a comment. Thank you.


    ReplyDelete
  43. Excellent information Providing by your Article thank you for taking the time to share with us such a nice article. Feel free to visit my website; 바카라사이트

    ReplyDelete
  44. Hi, Thanks for sharing wonderful articles...

    Website Maintenance Services

    ReplyDelete
  45. FAB VOGUE STUDIO provide all kind of Fabric which can be use for Making any designer apparel. Kora Silk Fabric We guarantee you’ll love working with us. Design Customization Available. Wholesale price available on request. Quality Assurance. COD Available.

    ReplyDelete
  46. Very rapidly this site will be famous among all blogging visitors, due to it's pleasant articles 토토사이트

    ReplyDelete
  47. Great site. A lot of helpful info here. 경마


    ReplyDelete
  48. Believe it or not, it is the kind of information I've long been searching for. It matches my demands a great deal. Thank you for composing this info.
    Archives
    eprimefeed.com
    Latest News
    Economy
    Politics
    Tech
    Sports
    Movies
    Fashion

    ReplyDelete
  49. Mepco Online Bills Payment. MEPCO online bills payment is made easier, MEPCO itself is not providing this facility on its website but they have made partnership with banks so that their consumers can make payments using apps of various online fintech companies and banks.

    ReplyDelete
  50. Thanks for sharing this information. Keep sharing more posts.
    Swhizz

    ReplyDelete
  51. I absolutely love this site. I will keep on coming here again and again. 바둑이게임

    ReplyDelete
  52. Your article reflects the issues people care about. The article provides timely information that reflects multi-dimensional views from multiple perspectives. 파친코사이트

    ReplyDelete
  53. I am working as a SEO Analyst.My blog gives information about latest technologies and IT Courses.
    movierulz me

    ReplyDelete
  54. Hey, your blog is very informative. It is nice to read such high-quality content. Thanks for sharing & keep up the good work. India No.1 Media

    ReplyDelete
  55. เครดิตฟรี ไม่ต้องฝาก ไม่ต้องเเชร์ เล่นได้เลย 24 ชม. เล่นง่าย ได้เงินไว มีบริการฝากถอนเงินแบบออโต้ที่รวดเร็วที่สุด สล็อตออนไลน์pg slot game ที่มาแรงที่สุดในปี 2022 นี้ สะดวกสบายมากที่สุด

    ReplyDelete
  56. I really appreciate the kind of topics you post here. Thanks for sharing us a great information that is actually helpful. Arknights Jacket

    ReplyDelete

  57. This is really interesting, you are such a great blogger.
    UnoGeeks is the best institute to learn Top IT Trending Courses please click below
    Microsoft Azure Training
    Mulesoft Training
    Salesforce Training
    Amazon Web Services(AWS) Training
    Google Cloud Training

    ReplyDelete
  58. I am really happy to say it’s an interesting post to read . I learn new information from your article. Buy Instagram Followers In Kerala

    ReplyDelete
  59. What a great content we have here buy online as we browse we also see this blog too and is pretty good cocaine for sale we also realize that blog are good for business we also bring fake cocaine best blog to visit
    sunflower oil

    ReplyDelete
  60. Extraordinary Blog! I should thank for the undertakings you have made recorded as a printed version this post. I'm confiding in a comparable best work from you in the future too. Thankful for sharing. Mind boggling locales!
    visit us: -swhizz
    our services: -
    Salesforce
    DevOps
    aws
    Testing
    Java

    ReplyDelete
  61. Nice Blog Bor ,keep itu up 🙂 and keep working hard.

    LIVE DRAW CHINA

    ReplyDelete
  62. Step-by-Step Hacking Tutorials about WiFi hacking,
    Kali Linux, Metasploit, exploits, ethical hacking, information security, malware analysis and scanning
    hacking Tutorial

    ReplyDelete
  63. bookmarked!!, I like your web site!
    https://infocampus.co.in/php-training-bangalore.html

    ReplyDelete
  64. This site really has all the information I wanted about this subject and didn’t know who to ask.
    Web Designing Training in Bangalore
    Full Stack Training in Bangalore
    Best Training Institute in Bangalore

    ReplyDelete
  65. thanks for sharing valuable information

    ReplyDelete
  66. Thanks for sharing useful and informative article. This a good content.Keep sharing with us.
    website designing course in rishikesh

    ReplyDelete
  67. Thanks for sharing such a valuable post. Please keep us updated for future posts.
    Gothic Clothing Men

    ReplyDelete
  68. Great post, thanks for sharing important information, keep posting Salesforce Training In Pune

    ReplyDelete
  69. This article provides valuable insights into the latest advancements in clinical health research and highlights the potential impact on patient care.
    Clinical Trial Management

    ReplyDelete
  70. hi this is very good blog and im also i like this blog i love it i loke it i will refrer to my frnd

    ReplyDelete
  71. Great article! Thanks for sharing this valuable insight. It offers a unique perspective visit:SAP FICO Training in Hyderabad

    ReplyDelete
  72. Upgrade your career clinical data mange ment from industry experts gets complete hands on servicess, on our sclinbio.

    ReplyDelete
  73. Superb Blog.Keep us updated with your blogs.Thanks.
    SQL Course in Pune

    ReplyDelete
  74. Incredible review, I’m certain you’re getting an extraordinary reaction. scilnbio

    ReplyDelete
  75. Nice thanks for sharing informative post like this keep posting if like more details visit my website https .sclinbio.com

    ReplyDelete
  76. I think this is a great web site to post and I have read most of the contents and I found it valuable for my future. Good work and Keep going.
    our sclinbio.com

    ReplyDelete
  77. this is a good web site and also very useful for humans.. tnx for shareing infomation our website sclinbio.com

    ReplyDelete
  78. thanks for this valuable information , keep posting and if you are intresting in web development then checkout my full stack training in satara

    ReplyDelete
  79. The International Council for Harmonisation of Technical Requirements for Pharmaceuticals for Human Use (ICH) Guideline for Good Clinical Practice (ICH GCP) is an internationally agreed standard that ensures ethical and scientific quality in designing, recording and reporting trials that involve the participation of human subjects.whitehall training

    ReplyDelete
  80. well, that's was a very informative blog.Keep up the good work and checkout this java course in pune

    ReplyDelete
  81. nice article

    thanks for sharing with us



    ReplyDelete
  82. This is a good web site and alos very useful content i like this web site thanks for sharing this blog our https//.Sclinbio./com

    ReplyDelete
  83. This is web site is very useful and also very like this domain our web site https.//sclinbio.com

    ReplyDelete
  84. This is the good website and it's a fantastic website Your contribution is greatly appreciated https://sclinbio.com

    ReplyDelete
  85. Lime kiln dust Florida is a valuable byproduct of lime production, often used in soil stabilization, road construction, and as a pH adjuster in agriculture. Its calcium-rich content helps neutralize soil acidity, improving crop growth, while its fine particles enhance soil compaction and durability in construction projects across the state.

    ReplyDelete
  86. it seems like you might have copied and pasted the same text as your previous message. It starts with the same introduction about being away for five months and wanting to re-JOIN the SQL blogging world. If you have a specific question or topic related to JOINs in T-SQL that you'd like to discuss, please let me know, and I'll be happy to assist you. Jobs Listings
    Visit Serafelagi.com!

    ReplyDelete
  87. truffle in Jeddah are a gourmet delicacy that adds a touch of luxury to dining experiences. These flavorful fungi are highly sought after for their earthy, aromatic qualities, and they are often used by chefs to elevate dishes and create unique culinary delights in the city's upscale restaurants.

    ReplyDelete
  88. What is E Waste Management and How to achieve it?
    E Waste Management is the technique of collecting the e-waste, recycling, reuse, and disposal it in an environmental friendly manner to minimize its harmful impact on environment and human health. E-Waste management has become a major challenge as it directly affects human health and the environment, and this is happening due to the lack of awareness. The growing problem of E-waste calls for greater emphasis on recycling E-waste and better E-management.
    What is E-Waste Management
    Proper control over the material used in the manufacturing process is important to reduce waste generation (Freeman1989). The quantity of waste generated can be reduced by reducing the number of hazardous materials used in the process and the amount of excess raw materials in stock. This can be done in two ways, i.e., establishing material-purchase review and control procedures and inventory tracking system.

    ReplyDelete
  89. Your story beautifully illustrates the whirlwind of life's milestones, balancing family, work, and personal achievements. It's a testament to your resilience and commitment. Much like fit out contractors in Dubai, who navigate tight schedules and demanding projects, you've shown how determination and dedication can lead to success in the face of challenges.

    ReplyDelete
  90. Top interior fit-out companies in Dubai redefine excellence in both commercial and villa renovations, seamlessly blending luxury and functionality. Elevate your projects with the unmatched expertise of leading fit out contractors in Dubai, where innovation meets sophistication for transformative designs.

    ReplyDelete
  91. Mobile Car Detailing Ottawa offers premium on-the-spot automotive rejuvenation, delivering meticulous detailing services wherever you are. Elevate your vehicle's aesthetics with the convenience of a professional touch at your doorstep.





    ReplyDelete
  92. Nice article...! your explanation is too good about the T-SQL, so keep posting more, thanks for sharing
    React JS training institute in kphb

    ReplyDelete
  93. A good piece of informational writing. I'm grateful you shared.
    Testing Tools Training Institute in Hyderabad

    ReplyDelete
  94. Appreciating the time and effort you put into your site and detailed information you offer.

    ReplyDelete
  95. Nice and informative post. I have subscribed to your posts and feed.

    ReplyDelete
  96. I must say that I found the post relevant to my subject area.

    ReplyDelete
  97. I think the reason reading is fun is because it is a post related.

    ReplyDelete
  98. information is very nice. Feel free to visit my website

    ReplyDelete
  99. Thank you for making something worth reading.

    ReplyDelete
  100. Gracias por compartir, consigue los mejores planes maduros aquí.

    ReplyDelete


  101. Hello! Someone in my Myspace group shared this website with us so I came to look it over.

    ReplyDelete
  102. I started to feel better after reading this article. I want to visit you often in the future

    ReplyDelete
  103. Some truly nice stuff on this internet site, I like it.

    ReplyDelete
  104. Very good article. I certainly appreciate this website. Keep it up!

    ReplyDelete
  105. What’s up to all, it’s genuinely a good for me to visit this website, it includes helpful Information.

    ReplyDelete
  106. Greate pieces. Keep writing such kind of info on your site. Im really impressed by your blog.

    ReplyDelete
  107. Pretty! This has been an extremely wonderful post. Many thanks for providing this info.

    ReplyDelete
  108. Great delivery. Great arguments. Keep up the amazing effort.

    ReplyDelete
  109. I like this blog its a master peace ! Glad I observed this on google.

    ReplyDelete
  110. Really informative post.Really looking forward to read more.

    ReplyDelete
  111. good post.Ne’er knew this, appreciate it for letting me know.

    ReplyDelete
  112. Very good post, thank you. I am surprised to find your website.

    ReplyDelete

  113. Saved as a favorite, I really like your blog!

    ReplyDelete
  114. Thanks a lot it helps me a lot in terms of Knowledge. React JS

    ReplyDelete
  115. This comment has been removed by the author.

    ReplyDelete

  116. Wow, wonderful weblog format! The overall look of your website is wonderful, as neatly as the content material!

    ReplyDelete

  117. Wonderful website. Lots of useful info here. Great article!

    ReplyDelete